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)
| 52 | // Parse DDL like `CREATE TABLE` or `ALTER TABLE`. |
| 53 | // This doesn't support destructive DDL like `DROP TABLE`. |
| 54 | func 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 | } |
no test coverage detected