Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions internal/engine/sqlite/analyzer/analyze.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,17 +89,20 @@ func (a *Analyzer) Analyze(ctx context.Context, n ast.Node, query string, migrat
for i := 0; i < colCount; i++ {
name := stmt.ColumnName(i)
declType := stmt.ColumnDeclType(i)
dbName := stmt.ColumnDatabaseName(i)
tableName := stmt.ColumnTableName(i)
originName := stmt.ColumnOriginName(i)
dbName := stmt.ColumnDatabaseName(i)

// Normalize the data type
dataType := normalizeType(declType)

// Determine if column is NOT NULL
// SQLite doesn't provide this info directly from prepared statements,
// so we default to nullable (false)
notNull := false
var notNull bool
var dataType string
if originName != "" {
declType, _, notNull, _, _, _ = a.conn.TableColumnMetadata(
dbName, tableName, originName)
}

// Normalize the data type
dataType = normalizeType(declType)

col := &core.Column{
Name: name,
Expand Down
10 changes: 7 additions & 3 deletions internal/engine/sqlite/analyzer/analyze_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@ func TestAnalyzer_Analyze(t *testing.T) {
expectedCols := []struct {
name string
dataType string
notNull bool
}{
{"id", "integer"},
{"name", "text"},
{"email", "text"},
{"id", "integer", false},
{"name", "text", true},
{"email", "text", false},
}

for i, expected := range expectedCols {
Expand All @@ -57,6 +58,9 @@ func TestAnalyzer_Analyze(t *testing.T) {
if col.DataType != expected.dataType {
t.Errorf("Column %d: expected dataType %q, got %q", i, expected.dataType, col.DataType)
}
if col.NotNull != expected.notNull {
t.Errorf("Column %d: expected notNull %v, got %v", i, expected.notNull, col.NotNull)
}
if col.Table == nil || col.Table.Name != "users" {
t.Errorf("Column %d: expected table 'users', got %v", i, col.Table)
}
Expand Down
Loading