MCPcopy
hub / github.com/sqldef/sqldef / parseCreateStmt

Method parseCreateStmt

database/postgres/parser.go:193–299  ·  view source on GitHub ↗
(stmt *pgquery.CreateStmt)

Source from the content-addressed store, hash-verified

191}
192
193func (p PostgresParser) parseCreateStmt(stmt *pgquery.CreateStmt) (parser.Statement, error) {
194 if stmt.Constraints != nil {
195 return nil, fmt.Errorf("unhandled node in parseCreateStmt: %#v", stmt)
196 }
197
198 tableName, err := p.parseTableName(stmt.Relation)
199 if err != nil {
200 return nil, err
201 }
202
203 var columns []*parser.ColumnDefinition
204 var indexes []*parser.IndexDefinition
205 var foreignKeys []*parser.ForeignKeyDefinition
206 var checks []*parser.CheckDefinition
207 var exclusions []*parser.ExclusionDefinition
208 for _, elt := range stmt.TableElts {
209 switch node := elt.Node.(type) {
210 case *pgquery.Node_ColumnDef:
211 column, foreignKey, err := p.parseColumnDef(node.ColumnDef, tableName)
212 if err != nil {
213 return nil, err
214 }
215 columns = append(columns, column)
216 if foreignKey != nil {
217 foreignKeys = append(foreignKeys, foreignKey)
218 }
219 case *pgquery.Node_Constraint:
220 var indexCols []parser.IndexColumn
221 for _, key := range node.Constraint.Keys {
222 indexCol := parser.IndexColumn{
223 Column: parser.NewIdent(key.Node.(*pgquery.Node_String_).String_.Sval, false),
224 Direction: "asc",
225 }
226 indexCols = append(indexCols, indexCol)
227 }
228 switch node.Constraint.Contype {
229 case pgquery.ConstrType_CONSTR_PRIMARY:
230 index := &parser.IndexDefinition{
231 Info: &parser.IndexInfo{
232 Type: "primary key",
233 Name: parser.NewIdent(node.Constraint.Conname, false),
234 Unique: true,
235 Primary: true,
236 Clustered: true,
237 },
238 Columns: indexCols,
239 Options: []*parser.IndexOption{},
240 }
241 indexes = append(indexes, index)
242 case pgquery.ConstrType_CONSTR_UNIQUE:
243 index := &parser.IndexDefinition{
244 Info: &parser.IndexInfo{
245 Type: "UNIQUE",
246 Name: parser.NewIdent(node.Constraint.Conname, false),
247 Unique: true,
248 },
249 Columns: indexCols,
250 Options: []*parser.IndexOption{},

Callers 1

parseStmtMethod · 0.95

Calls 8

parseTableNameMethod · 0.95
parseColumnDefMethod · 0.95
parseForeignKeyMethod · 0.95
parseExprMethod · 0.95
parseExclusionMethod · 0.95
NewIdentFunction · 0.92
NewWhereFunction · 0.92
ErrorfMethod · 0.65

Tested by

no test coverage detected