mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-30 19:09:34 -06:00
Moved GetForeignKeyEditor to WritableDoltTable, from AlterableDoltTable. This is necessary for recent analyzer changes, which replace the Table implementation in the plan node when creating an indexed access. IndexedDoltTable embeds WritableDoltTable, but not AlterableDoltTable.
This commit is contained in:
@@ -119,32 +119,37 @@ func TestSingleScript(t *testing.T) {
|
||||
|
||||
var scripts = []queries.ScriptTest{
|
||||
{
|
||||
Name: "insert duplicate key doesn't prevent other updates, autocommit off",
|
||||
Name: "failed statements data validation for DELETE, REPLACE",
|
||||
SetUpScript: []string{
|
||||
"CREATE TABLE t1 (pk BIGINT PRIMARY KEY, v1 VARCHAR(3));",
|
||||
"INSERT INTO t1 VALUES (1, 'abc');",
|
||||
"SET autocommit = 0;",
|
||||
"CREATE TABLE test (pk BIGINT PRIMARY KEY, v1 BIGINT, INDEX (v1));",
|
||||
"INSERT INTO test VALUES (1,1), (4,4), (5,5);",
|
||||
"CREATE TABLE test2 (pk BIGINT PRIMARY KEY, CONSTRAINT fk_test FOREIGN KEY (pk) REFERENCES test (v1));",
|
||||
"INSERT INTO test2 VALUES (4);",
|
||||
},
|
||||
Assertions: []queries.ScriptTestAssertion{
|
||||
{
|
||||
Query: "select * from t1 order by pk",
|
||||
Expected: []sql.Row{{1, "abc"}},
|
||||
Query: "DELETE FROM test WHERE pk > 0;",
|
||||
ExpectedErr: sql.ErrForeignKeyParentViolation,
|
||||
},
|
||||
{
|
||||
Query: "INSERT INTO t1 VALUES (1, 'abc');",
|
||||
ExpectedErr: sql.ErrPrimaryKeyViolation,
|
||||
Query: "SELECT * FROM test;",
|
||||
Expected: []sql.Row{{1, 1}, {4, 4}, {5, 5}},
|
||||
},
|
||||
{
|
||||
Query: "INSERT INTO t1 VALUES (2, 'def');",
|
||||
Expected: []sql.Row{{gmstypes.NewOkResult(1)}},
|
||||
Query: "SELECT * FROM test2;",
|
||||
Expected: []sql.Row{{4}},
|
||||
},
|
||||
{
|
||||
Query: "commit",
|
||||
SkipResultsCheck: true,
|
||||
Query: "REPLACE INTO test VALUES (1,7), (4,8), (5,9);",
|
||||
ExpectedErr: sql.ErrForeignKeyParentViolation,
|
||||
},
|
||||
{
|
||||
Query: "select * from t1 order by pk",
|
||||
Expected: []sql.Row{{1, "abc"}, {2, "def"}},
|
||||
Query: "SELECT * FROM test;",
|
||||
Expected: []sql.Row{{1, 1}, {4, 4}, {5, 5}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT * FROM test2;",
|
||||
Expected: []sql.Row{{4}},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -153,12 +158,20 @@ func TestSingleScript(t *testing.T) {
|
||||
tcc := &testCommitClock{}
|
||||
cleanup := installTestCommitClock(tcc)
|
||||
defer cleanup()
|
||||
|
||||
harness := newDoltHarness(t)
|
||||
harness.Setup(setup.MydbData)
|
||||
|
||||
for _, script := range scripts {
|
||||
sql.RunWithNowFunc(tcc.Now, func() error {
|
||||
enginetest.TestScript(t, harness, script)
|
||||
harness := newDoltHarness(t)
|
||||
harness.Setup(setup.MydbData)
|
||||
|
||||
engine, err := harness.NewEngine(t)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
engine.EngineAnalyzer().Debug = true
|
||||
engine.EngineAnalyzer().Verbose = true
|
||||
|
||||
enginetest.TestScriptWithEngine(t, engine, harness, script)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
@@ -996,6 +996,15 @@ func checksInSchema(sch schema.Schema) []sql.CheckDefinition {
|
||||
return checks
|
||||
}
|
||||
|
||||
// GetForeignKeyEditor implements sql.ForeignKeyTable
|
||||
func (t *WritableDoltTable) GetForeignKeyEditor(ctx *sql.Context) sql.ForeignKeyEditor {
|
||||
te, err := t.getTableEditor(ctx)
|
||||
if err != nil {
|
||||
return sqlutil.NewStaticErrorEditor(err)
|
||||
}
|
||||
return te
|
||||
}
|
||||
|
||||
// GetDeclaredForeignKeys implements sql.ForeignKeyTable
|
||||
func (t *DoltTable) GetDeclaredForeignKeys(ctx *sql.Context) ([]sql.ForeignKeyConstraint, error) {
|
||||
root, err := t.workingRoot(ctx)
|
||||
@@ -2676,15 +2685,6 @@ func (t *AlterableDoltTable) CreateIndexForForeignKey(ctx *sql.Context, idx sql.
|
||||
return t.updateFromRoot(ctx, newRoot)
|
||||
}
|
||||
|
||||
// GetForeignKeyEditor implements sql.ForeignKeyTable
|
||||
func (t *AlterableDoltTable) GetForeignKeyEditor(ctx *sql.Context) sql.ForeignKeyEditor {
|
||||
te, err := t.getTableEditor(ctx)
|
||||
if err != nil {
|
||||
return sqlutil.NewStaticErrorEditor(err)
|
||||
}
|
||||
return te
|
||||
}
|
||||
|
||||
// toForeignKeyConstraint converts a Dolt resolved foreign key to a GMS foreign key. If the key is unresolved, then this
|
||||
// function should not be used.
|
||||
func toForeignKeyConstraint(fk doltdb.ForeignKey, dbName string, childSch, parentSch schema.Schema) (cst sql.ForeignKeyConstraint, err error) {
|
||||
|
||||
Reference in New Issue
Block a user