mirror of
https://github.com/dolthub/dolt.git
synced 2026-05-25 03:05:52 -05:00
Properly handle IS (NOT) NULL in dolt_diff_ and dolt_commit_diff_ table lookups.
This commit is contained in:
@@ -392,7 +392,13 @@ func (itr prollyDiffIter) queueRows(ctx context.Context) {
|
||||
}
|
||||
}
|
||||
for _, rng := range itr.ranges {
|
||||
err := prolly.RangeDiffMaps(ctx, itr.from, itr.to, rng, cb)
|
||||
var err error
|
||||
// if the filter can match all NILs, then we need to return every added/removed diff
|
||||
if rng.Matches(ctx, val.EmptyTuple) {
|
||||
err = prolly.DiffMaps(ctx, itr.from, itr.to, false, cb)
|
||||
} else {
|
||||
err = prolly.RangeDiffMaps(ctx, itr.from, itr.to, rng, cb)
|
||||
}
|
||||
if err != nil && err != io.EOF {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
|
||||
@@ -594,13 +594,14 @@ var DiffSystemTableScriptTests = []queries.ScriptTest{
|
||||
"set @Commit2 = '';",
|
||||
"CALL DOLT_COMMIT_HASH_OUT(@Commit2, '-am', 'second commit');",
|
||||
"update t set c1 = 0 where pk > 5;",
|
||||
"delete from t where pk = 1;",
|
||||
"set @Commit3 = '';",
|
||||
"CALL DOLT_COMMIT_HASH_OUT(@Commit3, '-am', 'third commit');",
|
||||
},
|
||||
Assertions: []queries.ScriptTestAssertion{
|
||||
{
|
||||
Query: "SELECT COUNT(*) FROM DOLT_DIFF_t;",
|
||||
Expected: []sql.Row{{4}},
|
||||
Expected: []sql.Row{{5}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_DIFF_t WHERE to_pk = 1 ORDER BY to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type;",
|
||||
@@ -608,6 +609,21 @@ var DiffSystemTableScriptTests = []queries.ScriptTest{
|
||||
{1, 2, 3, nil, nil, nil, "added"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_DIFF_t WHERE to_pk IS NULL ORDER BY to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type;",
|
||||
Expected: []sql.Row{
|
||||
{nil, nil, nil, 1, 2, 3, "removed"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_DIFF_t WHERE to_pk IS NOT NULL ORDER BY to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type;",
|
||||
Expected: []sql.Row{
|
||||
{1, 2, 3, nil, nil, nil, "added"},
|
||||
{4, 5, 6, nil, nil, nil, "added"},
|
||||
{7, 0, 9, 7, 8, 9, "modified"},
|
||||
{7, 8, 9, nil, nil, nil, "added"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_DIFF_t WHERE to_pk > 1 ORDER BY to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type;",
|
||||
Expected: []sql.Row{
|
||||
@@ -618,6 +634,56 @@ var DiffSystemTableScriptTests = []queries.ScriptTest{
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "selecting from_pk columns",
|
||||
SetUpScript: []string{
|
||||
"create table t (pk int primary key, c1 int, c2 int);",
|
||||
"call dolt_add('.')",
|
||||
"insert into t values (1, 2, 3), (4, 5, 6);",
|
||||
"set @Commit1 = '';",
|
||||
"CALL DOLT_COMMIT_HASH_OUT(@Commit1, '-am', 'first commit');",
|
||||
"insert into t values (7, 8, 9);",
|
||||
"set @Commit2 = '';",
|
||||
"CALL DOLT_COMMIT_HASH_OUT(@Commit2, '-am', 'second commit');",
|
||||
"update t set c1 = 0 where pk > 5;",
|
||||
"delete from t where pk = 1;",
|
||||
"set @Commit3 = '';",
|
||||
"CALL DOLT_COMMIT_HASH_OUT(@Commit3, '-am', 'third commit');",
|
||||
},
|
||||
Assertions: []queries.ScriptTestAssertion{
|
||||
{
|
||||
Query: "SELECT COUNT(*) FROM DOLT_DIFF_t;",
|
||||
Expected: []sql.Row{{5}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_DIFF_t WHERE from_pk = 1 ORDER BY to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type;",
|
||||
Expected: []sql.Row{
|
||||
{nil, nil, nil, 1, 2, 3, "removed"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_DIFF_t WHERE from_pk IS NULL ORDER BY to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type;",
|
||||
Expected: []sql.Row{
|
||||
{1, 2, 3, nil, nil, nil, "added"},
|
||||
{4, 5, 6, nil, nil, nil, "added"},
|
||||
{7, 8, 9, nil, nil, nil, "added"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_DIFF_t WHERE from_pk IS NOT NULL ORDER BY to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type;",
|
||||
Expected: []sql.Row{
|
||||
{nil, nil, nil, 1, 2, 3, "removed"},
|
||||
{7, 0, 9, 7, 8, 9, "modified"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_DIFF_t WHERE from_pk > 1 ORDER BY to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type;",
|
||||
Expected: []sql.Row{
|
||||
{7, 0, 9, 7, 8, 9, "modified"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "selecting to_pk1 and to_pk2 columns",
|
||||
SetUpScript: []string{
|
||||
@@ -5038,6 +5104,30 @@ var CommitDiffSystemTableScriptTests = []queries.ScriptTest{
|
||||
{4, 5, 6, nil, nil, nil, "added"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_COMMIT_DIFF_t WHERE TO_COMMIT=@Commit5 and FROM_COMMIT=@Commit0 AND from_pk IS NULL;",
|
||||
Expected: []sql.Row{
|
||||
{4, 5, 6, nil, nil, nil, "added"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_COMMIT_DIFF_t WHERE TO_COMMIT=@Commit5 and FROM_COMMIT=@Commit3 AND from_pk IS NOT NULL;",
|
||||
Expected: []sql.Row{
|
||||
{nil, nil, nil, 1, 2, -1, "removed"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_commit_DIFF_t WHERE TO_COMMIT=@Commit5 and FROM_COMMIT=@Commit4 AND to_pk IS NULL;",
|
||||
Expected: []sql.Row{
|
||||
{nil, nil, nil, 1, 2, -2, "removed"},
|
||||
},
|
||||
},
|
||||
{
|
||||
Query: "SELECT to_pk, to_c1, to_c2, from_pk, from_c1, from_c2, diff_type FROM DOLT_commit_DIFF_t WHERE TO_COMMIT=@Commit5 and FROM_COMMIT=@Commit0 AND to_pk IS NOT NULL;",
|
||||
Expected: []sql.Row{
|
||||
{4, 5, 6, nil, nil, nil, "added"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -160,6 +160,10 @@ func (td TupleDesc) PrefixDesc(n int) TupleDesc {
|
||||
// GetField returns the ith field of |tup|.
|
||||
func (td TupleDesc) GetField(i int, tup Tuple) []byte {
|
||||
if i < len(td.fast) {
|
||||
cnt := tup.Count()
|
||||
if i >= cnt {
|
||||
return nil
|
||||
}
|
||||
start, stop := td.fast[i][0], td.fast[i][1]
|
||||
return tup[start:stop]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user