All checks were successful
- Implement MSSQL writer to generate SQL scripts for creating schemas, tables, and constraints. - Support for identity columns, indexes, and extended properties. - Add tests for column definitions, table creation, primary keys, foreign keys, and comments. - Include testing guide and sample schema for integration tests.
100 lines
2.9 KiB
Markdown
100 lines
2.9 KiB
Markdown
# 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
|