Files
relspecgo/pkg/mssql/README.md
Hein 466d657ea7
All checks were successful
CI / Test (1.24) (push) Successful in -23m27s
CI / Test (1.25) (push) Successful in -23m4s
CI / Lint (push) Successful in -24m57s
CI / Build (push) Successful in -25m15s
Integration Tests / Integration Tests (push) Successful in -25m42s
feat(mssql): add MSSQL writer for generating DDL from database schema
- 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.
2026-02-07 16:09:27 +02:00

2.9 KiB

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

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:

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