MCPcopy Create free account
hub / github.com/dolthub/doltgresql / nodeCreateIndex

Function nodeCreateIndex

server/ast/create_index.go:27–79  ·  view source on GitHub ↗

nodeCreateIndex handles *tree.CreateIndex nodes.

(ctx *Context, node *tree.CreateIndex)

Source from the content-addressed store, hash-verified

25
26// nodeCreateIndex handles *tree.CreateIndex nodes.
27func nodeCreateIndex(ctx *Context, node *tree.CreateIndex) (*vitess.AlterTable, error) {
28 if node == nil {
29 return nil, nil
30 }
31 if node.Concurrently {
32 return nil, errors.Errorf("concurrent index creation is not yet supported")
33 }
34 if node.Using != "" && strings.ToLower(node.Using) != "btree" {
35 return nil, errors.Errorf("index method %s is not yet supported", node.Using)
36 }
37 indexDef, err := nodeIndexTableDef(ctx, &tree.IndexTableDef{
38 Name: node.Name,
39 Columns: node.Columns,
40 IndexParams: node.IndexParams,
41 })
42 if err != nil {
43 return nil, err
44 }
45 tableName, err := nodeTableName(ctx, &node.Table)
46 if err != nil {
47 return nil, err
48 }
49 var indexType string
50 if node.Unique {
51 indexType = vitess.UniqueStr
52 }
53 var predicate vitess.Expr
54 if node.Predicate != nil {
55 predicate, err = nodeExpr(ctx, node.Predicate)
56 if err != nil {
57 return nil, err
58 }
59 }
60 return &vitess.AlterTable{
61 Table: tableName,
62 Statements: []*vitess.DDL{
63 {
64 Action: vitess.AlterStr,
65 Table: tableName,
66 IfNotExists: node.IfNotExists,
67 IndexSpec: &vitess.IndexSpec{
68 Action: vitess.CreateStr,
69 FromName: indexDef.Info.Name,
70 ToName: indexDef.Info.Name,
71 Type: indexType,
72 Fields: indexDef.Fields,
73 Options: indexDef.Options,
74 Predicate: predicate,
75 },
76 },
77 },
78 }, nil
79}

Callers 1

ConvertFunction · 0.85

Calls 4

nodeIndexTableDefFunction · 0.85
nodeTableNameFunction · 0.85
nodeExprFunction · 0.85
ErrorfMethod · 0.65

Tested by

no test coverage detected