Fix for reading old dolt_schemas

This commit is contained in:
Daylon Wilkins
2020-10-05 17:05:36 -07:00
committed by Daylon Wilkins
parent 214c29a1f7
commit f9bfdb1cb3
2 changed files with 48 additions and 13 deletions

View File

@@ -163,7 +163,13 @@ SQL
[[ "$output" =~ "type,name,fragment" ]] || false
[[ "$output" =~ "view,view1,SELECT 2+2 FROM dual" ]] || false
[[ "${#lines[@]}" = "2" ]] || false
dolt sql -q "CREATE VIEW view2 AS SELECT 2+2 FROM dual;"
run dolt sql -q "SELECT * FROM view1" -r=csv
[ "$status" -eq "0" ]
[[ "$output" =~ "2 + 2" ]] || false
[[ "$output" =~ "4" ]] || false
[[ "${#lines[@]}" = "2" ]] || false
# creating a new view/trigger will recreate the dolt_schemas table
dolt sql -q "CREATE VIEW view2 AS SELECT 3+3 FROM dual;"
run dolt diff
[ "$status" -eq "0" ]
[[ "$output" =~ "deleted table" ]] || false
@@ -172,6 +178,16 @@ SQL
[ "$status" -eq "0" ]
[[ "$output" =~ "id,type,name,fragment" ]] || false
[[ "$output" =~ "1,view,view1,SELECT 2+2 FROM dual" ]] || false
[[ "$output" =~ "2,view,view2,SELECT 2+2 FROM dual" ]] || false
[[ "$output" =~ "2,view,view2,SELECT 3+3 FROM dual" ]] || false
[[ "${#lines[@]}" = "3" ]] || false
run dolt sql -q "SELECT * FROM view1" -r=csv
[ "$status" -eq "0" ]
[[ "$output" =~ "2 + 2" ]] || false
[[ "$output" =~ "4" ]] || false
[[ "${#lines[@]}" = "2" ]] || false
run dolt sql -q "SELECT * FROM view2" -r=csv
[ "$status" -eq "0" ]
[[ "$output" =~ "3 + 3" ]] || false
[[ "$output" =~ "6" ]] || false
[[ "${#lines[@]}" = "2" ]] || false
}

View File

@@ -891,21 +891,40 @@ func RegisterSchemaFragments(ctx *sql.Context, db Database, root *doltdb.RootVal
var parseErrors []error
r, err := iter.Next()
for err == nil {
if r[1] == "view" {
name := r[2].(string)
definition := r[3].(string)
cv, err := parse.Parse(ctx, fmt.Sprintf("create view %s as %s", sqlfmt.QuoteIdentifier(name), definition))
if err != nil {
parseErrors = append(parseErrors, err)
} else {
err = ctx.Register(db.Name(), cv.(*plan.CreateView).Definition.AsView())
if stbl.Schema().Contains(doltdb.SchemasTablesIdCol, doltdb.SchemasTableName) { // new dolt_schemas added id column
for err == nil {
if r[1] == "view" {
name := r[2].(string)
definition := r[3].(string)
cv, err := parse.Parse(ctx, fmt.Sprintf("create view %s as %s", sqlfmt.QuoteIdentifier(name), definition))
if err != nil {
return err
parseErrors = append(parseErrors, err)
} else {
err = ctx.Register(db.Name(), cv.(*plan.CreateView).Definition.AsView())
if err != nil {
return err
}
}
}
r, err = iter.Next()
}
} else {
for err == nil {
if r[0] == "view" {
name := r[1].(string)
definition := r[2].(string)
cv, err := parse.Parse(ctx, fmt.Sprintf("create view %s as %s", sqlfmt.QuoteIdentifier(name), definition))
if err != nil {
parseErrors = append(parseErrors, err)
} else {
err = ctx.Register(db.Name(), cv.(*plan.CreateView).Definition.AsView())
if err != nil {
return err
}
}
}
r, err = iter.Next()
}
r, err = iter.Next()
}
if err != io.EOF {
return err