Skip to content

Commit df034c5

Browse files
authored
feat(sqlite): Support NOT NULL constraints (#4234)
1 parent 054bc91 commit df034c5

2 files changed

Lines changed: 17 additions & 10 deletions

File tree

internal/engine/sqlite/analyzer/analyze.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,17 +90,20 @@ func (a *Analyzer) Analyze(ctx context.Context, n ast.Node, query string, migrat
9090
for i := 0; i < colCount; i++ {
9191
name := stmt.ColumnName(i)
9292
declType := stmt.ColumnDeclType(i)
93+
dbName := stmt.ColumnDatabaseName(i)
9394
tableName := stmt.ColumnTableName(i)
9495
originName := stmt.ColumnOriginName(i)
95-
dbName := stmt.ColumnDatabaseName(i)
96-
97-
// Normalize the data type
98-
dataType := normalizeType(declType)
9996

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

105108
col := &core.Column{
106109
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)