MCPcopy
hub / github.com/sqldef/sqldef / parseDDL

Function parseDDL

schema/parser.go:54–346  ·  view source on GitHub ↗

Parse DDL like `CREATE TABLE` or `ALTER TABLE`. This doesn't support destructive DDL like `DROP TABLE`.

(mode GeneratorMode, ddl string, stmt parser.Statement, defaultSchema string)

Source from the content-addressed store, hash-verified

52// Parse DDL like `CREATE TABLE` or `ALTER TABLE`.
53// This doesn't support destructive DDL like `DROP TABLE`.
54func parseDDL(mode GeneratorMode, ddl string, stmt parser.Statement, defaultSchema string) (DDL, error) {
55 switch stmt := stmt.(type) {
56 case *parser.DDL:
57 if stmt.Action == parser.CreateTable {
58 // Handle PARTITION OF tables differently
59 if stmt.PartitionOf != nil {
60 return parsePartitionOf(mode, stmt, defaultSchema, ddl)
61 }
62 // TODO: handle other create DDL as error?
63 table, err := parseTable(mode, stmt, defaultSchema, ddl)
64 if err != nil {
65 return nil, err
66 }
67 return &CreateTable{
68 statement: ddl,
69 table: table,
70 }, nil
71 } else if stmt.Action == parser.CreateIndex {
72 index, err := parseIndex(stmt, ddl, mode)
73 if err != nil {
74 return nil, err
75 }
76 return &CreateIndex{
77 statement: ddl,
78 tableName: normalizeQualifiedName(mode, stmt.Table, defaultSchema),
79 index: index,
80 }, nil
81 } else if stmt.Action == parser.AddIndex {
82 index, err := parseIndex(stmt, ddl, mode)
83 if err != nil {
84 return nil, err
85 }
86 return &AddIndex{
87 statement: ddl,
88 tableName: normalizeQualifiedName(mode, stmt.Table, defaultSchema),
89 index: index,
90 }, nil
91 } else if stmt.Action == parser.AddPrimaryKey {
92 index, err := parseIndex(stmt, ddl, mode)
93 if err != nil {
94 return nil, err
95 }
96 return &AddPrimaryKey{
97 statement: ddl,
98 tableName: normalizeQualifiedName(mode, stmt.Table, defaultSchema),
99 index: index,
100 }, nil
101 } else if stmt.Action == parser.AddForeignKey {
102
103 indexColumns := stmt.ForeignKey.IndexColumns
104 referenceColumns := stmt.ForeignKey.ReferenceColumns
105 var constraintOptions *ConstraintOptions
106 if stmt.ForeignKey.ConstraintOptions != nil {
107 constraintOptions = &ConstraintOptions{
108 deferrable: stmt.ForeignKey.ConstraintOptions.Deferrable,
109 initiallyDeferred: stmt.ForeignKey.ConstraintOptions.InitiallyDeferred,
110 }
111 }

Callers 1

ParseDDLsFunction · 0.85

Calls 12

TransformSliceFunction · 0.92
StringFunction · 0.92
parsePartitionOfFunction · 0.85
parseTableFunction · 0.85
parseIndexFunction · 0.85
normalizeQualifiedNameFunction · 0.85
parseExclusionFunction · 0.85
parseDefaultDefinitionFunction · 0.85
ErrorfMethod · 0.65

Tested by

no test coverage detected