Skip to content

Commit f73a318

Browse files
authored
Merge pull request #2871 from dolthub/zachmu/resolve-alter-column
[no-release-notes] Exported several analyzer methods for use by doltgres
2 parents 14a57e0 + c856028 commit f73a318

File tree

4 files changed

+43
-43
lines changed

4 files changed

+43
-43
lines changed

sql/analyzer/rule_ids.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ const (
4444
finalizeUnionsId // finalizeUnions
4545
loadTriggersId // loadTriggers
4646
processTruncateId // processTruncate
47-
resolveAlterColumnId // resolveAlterColumn
47+
ResolveAlterColumnId // ResolveAlterColumn
4848
stripTableNameInDefaultsId // stripTableNamesFromColumnDefaults
4949
optimizeJoinsId // optimizeJoins
5050
pushFiltersId // pushFilters

sql/analyzer/ruleid_string.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sql/analyzer/rules.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ var OnceBeforeDefault = []Rule{
3838
{validateAlterTableId, validateAlterTable},
3939
{validateExprSemId, validateExprSem},
4040
{resolveDropConstraintId, resolveDropConstraint},
41-
{resolveAlterColumnId, resolveAlterColumn},
41+
{ResolveAlterColumnId, resolveAlterColumn},
4242
{validateDropTablesId, validateDropTables},
4343
{resolveCreateSelectId, resolveCreateSelect},
4444
{validateDropConstraintId, validateDropConstraint},

sql/analyzer/validate_create_table.go

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -90,18 +90,18 @@ func validateAlterTable(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
9090
switch n := n.(type) {
9191
case *plan.RenameTable:
9292
for _, name := range n.NewNames {
93-
err = validateIdentifier(name)
93+
err = ValidateIdentifier(name)
9494
if err != nil {
9595
return false
9696
}
9797
}
9898
case *plan.CreateCheck:
99-
err = validateIdentifier(n.Check.Name)
99+
err = ValidateIdentifier(n.Check.Name)
100100
if err != nil {
101101
return false
102102
}
103103
case *plan.CreateForeignKey:
104-
err = validateIdentifier(n.FkDef.Name)
104+
err = ValidateIdentifier(n.FkDef.Name)
105105
if err != nil {
106106
return false
107107
}
@@ -177,7 +177,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
177177
validator = sv
178178
}
179179
}
180-
keyedColumns, err = getTableIndexColumns(ctx, n.Table)
180+
keyedColumns, err = GetTableIndexColumns(ctx, n.Table)
181181
return false
182182
case *plan.RenameColumn:
183183
if rt, ok := n.Table.(*plan.ResolvedTable); ok {
@@ -192,7 +192,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
192192
validator = sv
193193
}
194194
}
195-
keyedColumns, err = getTableIndexColumns(ctx, n.Table)
195+
keyedColumns, err = GetTableIndexColumns(ctx, n.Table)
196196
return false
197197
case *plan.DropColumn:
198198
if rt, ok := n.Table.(*plan.ResolvedTable); ok {
@@ -207,7 +207,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
207207
validator = sv
208208
}
209209
}
210-
indexes, err = getTableIndexNames(ctx, a, n.Table)
210+
indexes, err = GetTableIndexNames(ctx, a, n.Table)
211211
default:
212212
}
213213
return true
@@ -237,7 +237,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
237237
return nil, transform.SameTree, err
238238
}
239239

240-
sch, err = validateModifyColumn(ctx, initialSch, sch, n.(*plan.ModifyColumn), keyedColumns)
240+
sch, err = ValidateModifyColumn(ctx, initialSch, sch, n.(*plan.ModifyColumn), keyedColumns)
241241
if err != nil {
242242
return nil, transform.SameTree, err
243243
}
@@ -247,7 +247,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
247247
if err != nil {
248248
return nil, transform.SameTree, err
249249
}
250-
sch, err = validateRenameColumn(initialSch, sch, n.(*plan.RenameColumn))
250+
sch, err = ValidateRenameColumn(initialSch, sch, n.(*plan.RenameColumn))
251251
if err != nil {
252252
return nil, transform.SameTree, err
253253
}
@@ -270,7 +270,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
270270
if err != nil {
271271
return nil, transform.SameTree, err
272272
}
273-
sch, err = validateDropColumn(initialSch, sch, n.(*plan.DropColumn))
273+
sch, err = ValidateDropColumn(initialSch, sch, n.(*plan.DropColumn))
274274
if err != nil {
275275
return nil, transform.SameTree, err
276276
}
@@ -287,7 +287,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
287287
return nil, transform.SameTree, err
288288
}
289289

290-
keyedColumns = updateKeyedColumns(keyedColumns, nn)
290+
keyedColumns = UpdateKeyedColumns(keyedColumns, nn)
291291
return n, transform.NewTree, nil
292292
case *plan.AlterPK:
293293
n, err := nn.WithTargetSchema(sch.Copy())
@@ -304,7 +304,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
304304
if err != nil {
305305
return nil, transform.SameTree, err
306306
}
307-
sch, err = validateAlterDefault(initialSch, sch, n.(*plan.AlterDefaultSet))
307+
sch, err = ValidateAlterDefault(initialSch, sch, n.(*plan.AlterDefaultSet))
308308
if err != nil {
309309
return nil, transform.SameTree, err
310310
}
@@ -314,7 +314,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
314314
if err != nil {
315315
return nil, transform.SameTree, err
316316
}
317-
sch, err = validateDropDefault(initialSch, sch, n.(*plan.AlterDefaultDrop))
317+
sch, err = ValidateDropDefault(initialSch, sch, n.(*plan.AlterDefaultDrop))
318318
if err != nil {
319319
return nil, transform.SameTree, err
320320
}
@@ -345,8 +345,8 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S
345345
return n, same, nil
346346
}
347347

348-
// updateKeyedColumns updates the keyedColumns map based on the action of the AlterIndex node
349-
func updateKeyedColumns(keyedColumns map[string]bool, n *plan.AlterIndex) map[string]bool {
348+
// UpdateKeyedColumns updates the keyedColumns map based on the action of the AlterIndex node
349+
func UpdateKeyedColumns(keyedColumns map[string]bool, n *plan.AlterIndex) map[string]bool {
350350
switch n.Action {
351351
case plan.IndexAction_Create:
352352
for _, col := range n.Columns {
@@ -361,16 +361,16 @@ func updateKeyedColumns(keyedColumns map[string]bool, n *plan.AlterIndex) map[st
361361
return keyedColumns
362362
}
363363

364-
// validateRenameColumn checks that a DDL RenameColumn node can be safely executed (e.g. no collision with other
364+
// ValidateRenameColumn checks that a DDL RenameColumn node can be safely executed (e.g. no collision with other
365365
// column names, doesn't invalidate any table check constraints).
366366
//
367367
// Note that schema is passed in twice, because one version is the initial version before the alter column expressions
368368
// are applied, and the second version is the current schema that is being modified as multiple nodes are processed.
369-
func validateRenameColumn(initialSch, sch sql.Schema, rc *plan.RenameColumn) (sql.Schema, error) {
369+
func ValidateRenameColumn(initialSch, sch sql.Schema, rc *plan.RenameColumn) (sql.Schema, error) {
370370
table := rc.Table
371371
nameable := table.(sql.Nameable)
372372

373-
err := validateIdentifier(rc.NewColumnName)
373+
err := ValidateIdentifier(rc.NewColumnName)
374374
if err != nil {
375375
return nil, err
376376
}
@@ -387,7 +387,7 @@ func validateRenameColumn(initialSch, sch sql.Schema, rc *plan.RenameColumn) (sq
387387
return nil, sql.ErrTableColumnNotFound.New(nameable.Name(), rc.ColumnName)
388388
}
389389

390-
err = validateColumnNotUsedInCheckConstraint(rc.ColumnName, rc.Checks())
390+
err = ValidateColumnNotUsedInCheckConstraint(rc.ColumnName, rc.Checks())
391391
if err != nil {
392392
return nil, err
393393
}
@@ -402,7 +402,7 @@ func ValidateAddColumn(schema sql.Schema, ac *plan.AddColumn) (sql.Schema, error
402402
table := ac.Table
403403
nameable := table.(sql.Nameable)
404404

405-
err := validateIdentifier(ac.Column().Name)
405+
err := ValidateIdentifier(ac.Column().Name)
406406
if err != nil {
407407
return nil, err
408408
}
@@ -449,7 +449,7 @@ func isStrictMysqlCompatibilityEnabled(ctx *sql.Context) (bool, error) {
449449
return i == 1, nil
450450
}
451451

452-
func validateModifyColumn(ctx *sql.Context, initialSch sql.Schema, schema sql.Schema, mc *plan.ModifyColumn, keyedColumns map[string]bool) (sql.Schema, error) {
452+
func ValidateModifyColumn(ctx *sql.Context, initialSch sql.Schema, schema sql.Schema, mc *plan.ModifyColumn, keyedColumns map[string]bool) (sql.Schema, error) {
453453
table := mc.Table
454454
tableName := table.(sql.Nameable).Name()
455455

@@ -461,7 +461,7 @@ func validateModifyColumn(ctx *sql.Context, initialSch sql.Schema, schema sql.Sc
461461
}
462462

463463
newCol := mc.NewColumn()
464-
if err := validateIdentifier(newCol.Name); err != nil {
464+
if err := ValidateIdentifier(newCol.Name); err != nil {
465465
return nil, err
466466
}
467467

@@ -522,14 +522,14 @@ func validateModifyColumn(ctx *sql.Context, initialSch sql.Schema, schema sql.Sc
522522
return newSch, nil
523523
}
524524

525-
func validateIdentifier(name string) error {
525+
func ValidateIdentifier(name string) error {
526526
if len(name) > sql.MaxIdentifierLength {
527527
return sql.ErrInvalidIdentifier.New(name)
528528
}
529529
return nil
530530
}
531531

532-
func validateDropColumn(initialSch, sch sql.Schema, dc *plan.DropColumn) (sql.Schema, error) {
532+
func ValidateDropColumn(initialSch, sch sql.Schema, dc *plan.DropColumn) (sql.Schema, error) {
533533
table := dc.Table
534534
nameable := table.(sql.Nameable)
535535

@@ -550,9 +550,9 @@ func validateDropColumn(initialSch, sch sql.Schema, dc *plan.DropColumn) (sql.Sc
550550
return newSch, nil
551551
}
552552

553-
// validateColumnNotUsedInCheckConstraint validates that the specified column name is not referenced in any of
553+
// ValidateColumnNotUsedInCheckConstraint validates that the specified column name is not referenced in any of
554554
// the specified table check constraints.
555-
func validateColumnNotUsedInCheckConstraint(columnName string, checks sql.CheckConstraints) error {
555+
func ValidateColumnNotUsedInCheckConstraint(columnName string, checks sql.CheckConstraints) error {
556556
var err error
557557
for _, check := range checks {
558558
_ = transform.InspectExpr(check.Expr, func(e sql.Expression) bool {
@@ -626,7 +626,7 @@ func validateColumnSafeToDropWithCheckConstraint(columnName string, checks sql.C
626626
func validateAlterIndex(ctx *sql.Context, initialSch, sch sql.Schema, ai *plan.AlterIndex, indexes []string) ([]string, error) {
627627
switch ai.Action {
628628
case plan.IndexAction_Create:
629-
err := validateIdentifier(ai.IndexName)
629+
err := ValidateIdentifier(ai.IndexName)
630630
if err != nil {
631631
return nil, err
632632
}
@@ -662,7 +662,7 @@ func validateAlterIndex(ctx *sql.Context, initialSch, sch sql.Schema, ai *plan.A
662662
// Remove the index from the list
663663
return append(indexes[:savedIdx], indexes[savedIdx+1:]...), nil
664664
case plan.IndexAction_Rename:
665-
err := validateIdentifier(ai.IndexName)
665+
err := ValidateIdentifier(ai.IndexName)
666666
if err != nil {
667667
return nil, err
668668
}
@@ -917,8 +917,8 @@ func validateIndex(ctx *sql.Context, colMap map[string]*sql.Column, idxDef *sql.
917917
return nil
918918
}
919919

920-
// getTableIndexColumns returns the columns over which indexes are defined
921-
func getTableIndexColumns(ctx *sql.Context, table sql.Node) (map[string]bool, error) {
920+
// GetTableIndexColumns returns the columns over which indexes are defined
921+
func GetTableIndexColumns(ctx *sql.Context, table sql.Node) (map[string]bool, error) {
922922
ia, err := newIndexAnalyzerForNode(ctx, table)
923923
if err != nil {
924924
return nil, err
@@ -937,8 +937,8 @@ func getTableIndexColumns(ctx *sql.Context, table sql.Node) (map[string]bool, er
937937
return keyedColumns, nil
938938
}
939939

940-
// getTableIndexNames returns the names of indexes associated with a table.
941-
func getTableIndexNames(ctx *sql.Context, _ *Analyzer, table sql.Node) ([]string, error) {
940+
// GetTableIndexNames returns the names of indexes associated with a table.
941+
func GetTableIndexNames(ctx *sql.Context, _ *Analyzer, table sql.Node) ([]string, error) {
942942
ia, err := newIndexAnalyzerForNode(ctx, table)
943943
if err != nil {
944944
return nil, err
@@ -951,7 +951,7 @@ func getTableIndexNames(ctx *sql.Context, _ *Analyzer, table sql.Node) ([]string
951951
names[i] = index.ID()
952952
}
953953

954-
if hasPrimaryKeys(table.Schema()) {
954+
if HasPrimaryKeys(table.Schema()) {
955955
names = append(names, "PRIMARY")
956956
}
957957

@@ -963,7 +963,7 @@ func validatePrimaryKey(ctx *sql.Context, initialSch, sch sql.Schema, ai *plan.A
963963
tableName := getTableName(ai.Table)
964964
switch ai.Action {
965965
case plan.PrimaryKeyAction_Create:
966-
if hasPrimaryKeys(sch) {
966+
if HasPrimaryKeys(sch) {
967967
return nil, sql.ErrMultiplePrimaryKeysDefined.New()
968968
}
969969

@@ -996,7 +996,7 @@ func validatePrimaryKey(ctx *sql.Context, initialSch, sch sql.Schema, ai *plan.A
996996

997997
return sch, nil
998998
case plan.PrimaryKeyAction_Drop:
999-
if !hasPrimaryKeys(sch) {
999+
if !HasPrimaryKeys(sch) {
10001000
return nil, sql.ErrCantDropFieldOrKey.New("PRIMARY")
10011001
}
10021002

@@ -1012,8 +1012,8 @@ func validatePrimaryKey(ctx *sql.Context, initialSch, sch sql.Schema, ai *plan.A
10121012
}
10131013
}
10141014

1015-
// validateAlterDefault validates the addition of a default value to a column.
1016-
func validateAlterDefault(initialSch, sch sql.Schema, as *plan.AlterDefaultSet) (sql.Schema, error) {
1015+
// ValidateAlterDefault validates the addition of a default value to a column.
1016+
func ValidateAlterDefault(initialSch, sch sql.Schema, as *plan.AlterDefaultSet) (sql.Schema, error) {
10171017
idx := sch.IndexOf(as.ColumnName, getTableName(as.Table))
10181018
if idx == -1 {
10191019
return nil, sql.ErrTableColumnNotFound.New(as.ColumnName)
@@ -1029,8 +1029,8 @@ func validateAlterDefault(initialSch, sch sql.Schema, as *plan.AlterDefaultSet)
10291029
return sch, err
10301030
}
10311031

1032-
// validateDropDefault validates the dropping of a default value.
1033-
func validateDropDefault(initialSch, sch sql.Schema, ad *plan.AlterDefaultDrop) (sql.Schema, error) {
1032+
// ValidateDropDefault validates the dropping of a default value.
1033+
func ValidateDropDefault(initialSch, sch sql.Schema, ad *plan.AlterDefaultDrop) (sql.Schema, error) {
10341034
idx := sch.IndexOf(ad.ColumnName, getTableName(ad.Table))
10351035
if idx == -1 {
10361036
return nil, sql.ErrTableColumnNotFound.New(ad.ColumnName)
@@ -1041,7 +1041,7 @@ func validateDropDefault(initialSch, sch sql.Schema, ad *plan.AlterDefaultDrop)
10411041
return sch, nil
10421042
}
10431043

1044-
func hasPrimaryKeys(sch sql.Schema) bool {
1044+
func HasPrimaryKeys(sch sql.Schema) bool {
10451045
for _, c := range sch {
10461046
if c.PrimaryKey {
10471047
return true

0 commit comments

Comments
 (0)