# MSSQL Package Provides utilities for working with Microsoft SQL Server data types and conversions. ## Components ### Type Mapping Provides bidirectional conversion between canonical types and MSSQL types: - **CanonicalToMSSQL**: Convert abstract types to MSSQL-specific types - **MSSQLToCanonical**: Convert MSSQL types to abstract representation ## Type Conversion Tables ### Canonical → MSSQL | Canonical | MSSQL | Notes | |-----------|-------|-------| | int | INT | 32-bit signed integer | | int64 | BIGINT | 64-bit signed integer | | int32 | INT | 32-bit signed integer | | int16 | SMALLINT | 16-bit signed integer | | int8 | TINYINT | 8-bit unsigned integer | | bool | BIT | 0 (false) or 1 (true) | | float32 | REAL | Single precision floating point | | float64 | FLOAT | Double precision floating point | | decimal | NUMERIC | Fixed-point decimal number | | string | NVARCHAR(255) | Unicode variable-length string | | text | NVARCHAR(MAX) | Unicode large text | | timestamp | DATETIME2 | Date and time without timezone | | timestamptz | DATETIMEOFFSET | Date and time with timezone offset | | uuid | UNIQUEIDENTIFIER | GUID/UUID type | | bytea | VARBINARY(MAX) | Variable-length binary data | | date | DATE | Date only | | time | TIME | Time only | | json | NVARCHAR(MAX) | Stored as text (MSSQL v2016+) | | jsonb | NVARCHAR(MAX) | Stored as text (MSSQL v2016+) | ### MSSQL → Canonical | MSSQL | Canonical | Notes | |-------|-----------|-------| | INT, INTEGER | int | Standard integer | | BIGINT | int64 | Large integer | | SMALLINT | int16 | Small integer | | TINYINT | int8 | Tiny integer | | BIT | bool | Boolean/bit flag | | REAL | float32 | Single precision | | FLOAT | float64 | Double precision | | NUMERIC, DECIMAL | decimal | Exact decimal | | NVARCHAR, VARCHAR | string | Variable-length string | | NCHAR, CHAR | string | Fixed-length string | | DATETIME2 | timestamp | Default timestamp | | DATETIMEOFFSET | timestamptz | Timestamp with timezone | | DATE | date | Date only | | TIME | time | Time only | | UNIQUEIDENTIFIER | uuid | UUID/GUID | | VARBINARY, BINARY | bytea | Binary data | | XML | string | Stored as text | ## Usage ```go package main import ( "fmt" "git.warky.dev/wdevs/relspecgo/pkg/mssql" ) func main() { // Convert canonical to MSSQL mssqlType := mssql.ConvertCanonicalToMSSQL("int") fmt.Println(mssqlType) // Output: INT // Convert MSSQL to canonical canonicalType := mssql.ConvertMSSQLToCanonical("BIGINT") fmt.Println(canonicalType) // Output: int64 // Handle parameterized types canonicalType = mssql.ConvertMSSQLToCanonical("NVARCHAR(255)") fmt.Println(canonicalType) // Output: string } ``` ## Testing Run tests with: ```bash go test ./pkg/mssql/... ``` ## Notes - Type conversions are case-insensitive - Parameterized types (e.g., `NVARCHAR(255)`) have their base type extracted - Unmapped types default to `string` for safety - The package supports SQL Server 2016 and later versions