MCPcopy
hub / github.com/sqldef/sqldef / parseColumnDef

Method parseColumnDef

database/postgres/parser.go:1166–1234  ·  view source on GitHub ↗
(columnDef *pgquery.ColumnDef, tableName parser.TableName)

Source from the content-addressed store, hash-verified

1164}
1165
1166func (p PostgresParser) parseColumnDef(columnDef *pgquery.ColumnDef, tableName parser.TableName) (*parser.ColumnDefinition, *parser.ForeignKeyDefinition, error) {
1167 if columnDef.Inhcount != 0 || columnDef.Identity != "" || columnDef.Generated != "" || columnDef.Storage != "" || columnDef.CollClause != nil {
1168 return nil, nil, fmt.Errorf("unhandled node in parseColumnDef: %#v", columnDef)
1169 }
1170
1171 columnType, err := p.parseTypeName(columnDef.TypeName)
1172 if err != nil {
1173 return nil, nil, err
1174 }
1175
1176 var foreignKey *parser.ForeignKeyDefinition
1177
1178 for _, columnConstraint := range columnDef.Constraints {
1179 constraint := columnConstraint.Node.(*pgquery.Node_Constraint).Constraint
1180 switch constraint.Contype {
1181 case pgquery.ConstrType_CONSTR_NULL:
1182 columnType.NotNull = parser.NewBoolVal(false)
1183 case pgquery.ConstrType_CONSTR_NOTNULL:
1184 columnType.NotNull = parser.NewBoolVal(true)
1185 case pgquery.ConstrType_CONSTR_DEFAULT:
1186 defaultValue, err := p.parseDefaultValue(constraint.RawExpr)
1187 if err != nil {
1188 return nil, nil, err
1189 }
1190 columnType.Default = defaultValue
1191 case pgquery.ConstrType_CONSTR_CHECK:
1192 check, err := p.parseCheckConstraint(constraint)
1193 if err != nil {
1194 return nil, nil, err
1195 }
1196 columnType.Check = check
1197 case pgquery.ConstrType_CONSTR_PRIMARY:
1198 columnType.KeyOpt = parser.ColumnKeyOption(1)
1199 case pgquery.ConstrType_CONSTR_UNIQUE:
1200 columnType.KeyOpt = parser.ColumnKeyOption(3)
1201 case pgquery.ConstrType_CONSTR_FOREIGN:
1202 foreignKey, err = p.parseForeignKey(constraint)
1203 if err != nil {
1204 return nil, nil, err
1205 }
1206 foreignKey.IndexColumns = []parser.Ident{parser.NewIdent(columnDef.Colname, false)}
1207 case pgquery.ConstrType_CONSTR_ATTR_DEFERRABLE:
1208 foreignKey.ConstraintOptions.Deferrable = true
1209 case pgquery.ConstrType_CONSTR_ATTR_NOT_DEFERRABLE:
1210 foreignKey.ConstraintOptions.Deferrable = false
1211 case pgquery.ConstrType_CONSTR_ATTR_DEFERRED:
1212 foreignKey.ConstraintOptions.InitiallyDeferred = true
1213 case pgquery.ConstrType_CONSTR_ATTR_IMMEDIATE:
1214 foreignKey.ConstraintOptions.InitiallyDeferred = false
1215 case pgquery.ConstrType_CONSTR_GENERATED:
1216 expr, err := p.parseExpr(constraint.RawExpr)
1217 if err != nil {
1218 return nil, nil, err
1219 }
1220 columnType.Generated = &parser.GeneratedColumn{
1221 Expr: expr,
1222 // Postgres only supports stored generated column
1223 GeneratedType: "STORED",

Callers 1

parseCreateStmtMethod · 0.95

Calls 9

parseTypeNameMethod · 0.95
parseDefaultValueMethod · 0.95
parseCheckConstraintMethod · 0.95
parseForeignKeyMethod · 0.95
parseExprMethod · 0.95
NewBoolValFunction · 0.92
ColumnKeyOptionTypeAlias · 0.92
NewIdentFunction · 0.92
ErrorfMethod · 0.65

Tested by

no test coverage detected