Skip to content

Commit 182de39

Browse files
committed
feat(sqlite): Support NOT NULL constraints
1 parent 74ecda5 commit 182de39

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

internal/engine/sqlite/analyzer/analyze.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,18 +88,21 @@ func (a *Analyzer) Analyze(ctx context.Context, n ast.Node, query string, migrat
8888
colCount := stmt.ColumnCount()
8989
for i := 0; i < colCount; i++ {
9090
name := stmt.ColumnName(i)
91-
declType := stmt.ColumnDeclType(i)
91+
dbName := stmt.ColumnDatabaseName(i)
9292
tableName := stmt.ColumnTableName(i)
9393
originName := stmt.ColumnOriginName(i)
94-
dbName := stmt.ColumnDatabaseName(i)
95-
96-
// Normalize the data type
97-
dataType := normalizeType(declType)
9894

9995
// Determine if column is NOT NULL
100-
// SQLite doesn't provide this info directly from prepared statements,
101-
// so we default to nullable (false)
102-
notNull := false
96+
var notNull bool
97+
var dataType string
98+
if originName != "" {
99+
var declType string
100+
declType, _, notNull, _, _, _ = a.conn.TableColumnMetadata(
101+
dbName, tableName, originName)
102+
103+
// Normalize the data type
104+
dataType = normalizeType(declType)
105+
}
103106

104107
col := &core.Column{
105108
Name: name,

internal/engine/sqlite/analyzer/analyze_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@ func TestAnalyzer_Analyze(t *testing.T) {
4040
expectedCols := []struct {
4141
name string
4242
dataType string
43+
notNull bool
4344
}{
44-
{"id", "integer"},
45-
{"name", "text"},
46-
{"email", "text"},
45+
{"id", "integer", false},
46+
{"name", "text", true},
47+
{"email", "text", false},
4748
}
4849

4950
for i, expected := range expectedCols {
@@ -57,6 +58,9 @@ func TestAnalyzer_Analyze(t *testing.T) {
5758
if col.DataType != expected.dataType {
5859
t.Errorf("Column %d: expected dataType %q, got %q", i, expected.dataType, col.DataType)
5960
}
61+
if col.NotNull != expected.notNull {
62+
t.Errorf("Column %d: expected notNull %v, got %v", i, expected.notNull, col.NotNull)
63+
}
6064
if col.Table == nil || col.Table.Name != "users" {
6165
t.Errorf("Column %d: expected table 'users', got %v", i, col.Table)
6266
}

0 commit comments

Comments
 (0)