From 6d54b13747551cf9d986d1fa90c702a0ab887460 Mon Sep 17 00:00:00 2001 From: Nick Tobey Date: Wed, 24 Apr 2024 10:55:24 -0700 Subject: [PATCH 1/7] Bump GMS version, use new sql.JSONWrapper interface. --- go/go.mod | 2 +- go/go.sum | 4 ++-- go/libraries/doltcore/merge/merge_prolly_rows.go | 6 +++++- .../doltcore/merge/violations_fk_prolly.go | 4 ++-- .../doltcore/merge/violations_unique_prolly.go | 12 ++++++------ .../doltcore/sqle/json/noms_json_value.go | 13 ++++++++----- go/libraries/doltcore/sqle/schema_table.go | 10 ++++++++-- go/libraries/doltcore/sqle/schema_table_test.go | 10 +--------- .../doltcore/sqle/statspro/dolt_stats.go | 16 ++++++++++++---- 9 files changed, 45 insertions(+), 32 deletions(-) diff --git a/go/go.mod b/go/go.mod index dbe71ab799..8e360d1a54 100644 --- a/go/go.mod +++ b/go/go.mod @@ -57,7 +57,7 @@ require ( github.com/cespare/xxhash v1.1.0 github.com/creasty/defaults v1.6.0 github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2 - github.com/dolthub/go-mysql-server v0.18.2-0.20240423173114-584cfcde330f + github.com/dolthub/go-mysql-server v0.18.2-0.20240426194858-464869d0704f github.com/dolthub/swiss v0.1.0 github.com/goccy/go-json v0.10.2 github.com/google/go-github/v57 v57.0.0 diff --git a/go/go.sum b/go/go.sum index dacec21eca..4deb8d68c0 100644 --- a/go/go.sum +++ b/go/go.sum @@ -183,8 +183,8 @@ github.com/dolthub/fslock v0.0.3 h1:iLMpUIvJKMKm92+N1fmHVdxJP5NdyDK5bK7z7Ba2s2U= github.com/dolthub/fslock v0.0.3/go.mod h1:QWql+P17oAAMLnL4HGB5tiovtDuAjdDTPbuqx7bYfa0= github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e h1:kPsT4a47cw1+y/N5SSCkma7FhAPw7KeGmD6c9PBZW9Y= github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e/go.mod h1:KPUcpx070QOfJK1gNe0zx4pA5sicIK1GMikIGLKC168= -github.com/dolthub/go-mysql-server v0.18.2-0.20240423173114-584cfcde330f h1:PAIn/PyQh+nowTfWwT9zLNMi/Ce2dhn/6KrHZTPExBg= -github.com/dolthub/go-mysql-server v0.18.2-0.20240423173114-584cfcde330f/go.mod h1:O8MD59KWVizPSRZPCt1xDMVRDFYlAXAP+t+N1s0s+4c= +github.com/dolthub/go-mysql-server v0.18.2-0.20240426194858-464869d0704f h1:Bj0gebv2OnEq92DYL9NACZlw8kPzfGukph2rxHlTfKI= +github.com/dolthub/go-mysql-server v0.18.2-0.20240426194858-464869d0704f/go.mod h1:O8MD59KWVizPSRZPCt1xDMVRDFYlAXAP+t+N1s0s+4c= github.com/dolthub/ishell v0.0.0-20221214210346-d7db0b066488 h1:0HHu0GWJH0N6a6keStrHhUAK5/o9LVfkh44pvsV4514= github.com/dolthub/ishell v0.0.0-20221214210346-d7db0b066488/go.mod h1:ehexgi1mPxRTk0Mok/pADALuHbvATulTh6gzr7NzZto= github.com/dolthub/jsonpath v0.0.2-0.20240227200619-19675ab05c71 h1:bMGS25NWAGTEtT5tOBsCuCrlYnLRKpbJVJkDbrTRhwQ= diff --git a/go/libraries/doltcore/merge/merge_prolly_rows.go b/go/libraries/doltcore/merge/merge_prolly_rows.go index 7a569e8588..96596909f5 100644 --- a/go/libraries/doltcore/merge/merge_prolly_rows.go +++ b/go/libraries/doltcore/merge/merge_prolly_rows.go @@ -1998,7 +1998,11 @@ func (m *valueMerger) mergeJSONAddr(ctx context.Context, baseAddr []byte, leftAd return nil, true, nil } - mergedBytes, err := json.Marshal(mergedDoc.ToInterface()) + mergedVal, err := mergedDoc.ToInterface() + if err != nil { + return nil, true, err + } + mergedBytes, err := json.Marshal(mergedVal) if err != nil { return nil, true, err } diff --git a/go/libraries/doltcore/merge/violations_fk_prolly.go b/go/libraries/doltcore/merge/violations_fk_prolly.go index cb99f8b570..417c3838d8 100644 --- a/go/libraries/doltcore/merge/violations_fk_prolly.go +++ b/go/libraries/doltcore/merge/violations_fk_prolly.go @@ -396,7 +396,7 @@ type FkCVMeta struct { var _ sql.JSONWrapper = FkCVMeta{} -func (m FkCVMeta) ToInterface() interface{} { +func (m FkCVMeta) ToInterface() (interface{}, error) { return map[string]interface{}{ "Columns": m.Columns, "ForeignKey": m.ForeignKey, @@ -407,7 +407,7 @@ func (m FkCVMeta) ToInterface() interface{} { "ReferencedIndex": m.ReferencedIndex, "ReferencedTable": m.ReferencedTable, "Table": m.Table, - } + }, nil } // PrettyPrint is a custom pretty print function to match the old format's diff --git a/go/libraries/doltcore/merge/violations_unique_prolly.go b/go/libraries/doltcore/merge/violations_unique_prolly.go index b302f630d4..2fe65e41f1 100644 --- a/go/libraries/doltcore/merge/violations_unique_prolly.go +++ b/go/libraries/doltcore/merge/violations_unique_prolly.go @@ -54,11 +54,11 @@ type UniqCVMeta struct { Name string `json:"Name"` } -func (m UniqCVMeta) ToInterface() interface{} { +func (m UniqCVMeta) ToInterface() (interface{}, error) { return map[string]interface{}{ "Columns": m.Columns, "Name": m.Name, - } + }, nil } var _ sql.JSONWrapper = UniqCVMeta{} @@ -149,10 +149,10 @@ func newNotNullViolationMeta(violations []string, value val.Tuple) (prolly.Const }, nil } -func (m NullViolationMeta) ToInterface() interface{} { +func (m NullViolationMeta) ToInterface() (interface{}, error) { return map[string]interface{}{ "Columns": m.Columns, - } + }, nil } func (m NullViolationMeta) Unmarshall(ctx *sql.Context) (val types.JSONDocument, err error) { @@ -193,9 +193,9 @@ func (m CheckCVMeta) Unmarshall(_ *sql.Context) (val types.JSONDocument, err err return types.JSONDocument{Val: m}, nil } -func (m CheckCVMeta) ToInterface() interface{} { +func (m CheckCVMeta) ToInterface() (interface{}, error) { return map[string]interface{}{ "Name": m.Name, "Expression": m.Expression, - } + }, nil } diff --git a/go/libraries/doltcore/sqle/json/noms_json_value.go b/go/libraries/doltcore/sqle/json/noms_json_value.go index 914a859eaf..c75ecf6b81 100644 --- a/go/libraries/doltcore/sqle/json/noms_json_value.go +++ b/go/libraries/doltcore/sqle/json/noms_json_value.go @@ -46,7 +46,10 @@ func NomsJSONFromJSONValue(ctx context.Context, vrw types.ValueReadWriter, val s return noms, nil } - sqlVal := val.ToInterface() + sqlVal, err := val.ToInterface() + if err != nil { + return NomsJSON{}, err + } v, err := marshalJSON(ctx, vrw, sqlVal) if err != nil { @@ -133,17 +136,17 @@ func marshalJSONObject(ctx context.Context, vrw types.ValueReadWriter, obj map[s return types.NewMap(ctx, vrw, vals...) } -func (v NomsJSON) ToInterface() interface{} { +func (v NomsJSON) ToInterface() (interface{}, error) { nomsVal, err := types.JSON(v).Inner() if err != nil { - panic(err) + return nil, err } val, err := unmarshalJSON(context.Background(), nomsVal) if err != nil { - panic(err) + return nil, err } - return val + return val, nil } // Unmarshall implements the sql.JSONValue interface. diff --git a/go/libraries/doltcore/sqle/schema_table.go b/go/libraries/doltcore/sqle/schema_table.go index 9188273352..ef4b93a0fe 100644 --- a/go/libraries/doltcore/sqle/schema_table.go +++ b/go/libraries/doltcore/sqle/schema_table.go @@ -300,6 +300,9 @@ func getSchemaFragmentsOfType(ctx *sql.Context, tbl *WritableDoltTable, fragType // Extract Created Time from JSON column createdTime, err := getCreatedTime(ctx, sqlRow[extraIdx].(sql.JSONWrapper)) + if err != nil { + return nil, err + } frags = append(frags, schemaFragment{ name: sqlRow[nameIdx].(string), @@ -327,9 +330,12 @@ func loadDefaultSqlMode() (string, error) { } func getCreatedTime(ctx *sql.Context, extraCol sql.JSONWrapper) (int64, error) { - doc := extraCol.ToInterface() + doc, err := extraCol.ToInterface() + if err != nil { + return 0, err + } - err := fmt.Errorf("value %v does not contain creation time", doc) + err = fmt.Errorf("value %v does not contain creation time", doc) obj, ok := doc.(map[string]interface{}) if !ok { diff --git a/go/libraries/doltcore/sqle/schema_table_test.go b/go/libraries/doltcore/sqle/schema_table_test.go index 605ab575f1..09e6d92343 100644 --- a/go/libraries/doltcore/sqle/schema_table_test.go +++ b/go/libraries/doltcore/sqle/schema_table_test.go @@ -27,7 +27,6 @@ import ( "github.com/dolthub/dolt/go/libraries/doltcore/doltdb" "github.com/dolthub/dolt/go/libraries/doltcore/dtestutils" - "github.com/dolthub/dolt/go/libraries/doltcore/sqle/json" "github.com/dolthub/dolt/go/libraries/doltcore/table/editor" ) @@ -137,19 +136,12 @@ func TestSchemaTableMigrationV1(t *testing.T) { require.NoError(t, err) // convert the JSONDocument to a string for comparison if row[3] != nil { - // Annoying difference in representation between storage versions here - jsonDoc, ok := row[3].(gmstypes.JSONDocument) + jsonDoc, ok := row[3].(gmstypes.JSONStringer) if ok { row[3], err = jsonDoc.JSONString() row[3] = strings.ReplaceAll(row[3].(string), " ", "") // remove spaces } - nomsJson, ok := row[3].(json.NomsJSON) - if ok { - row[3], err = nomsJson.JSONString() - row[3] = strings.ReplaceAll(row[3].(string), " ", "") // remove spaces - } - require.NoError(t, err) } diff --git a/go/libraries/doltcore/sqle/statspro/dolt_stats.go b/go/libraries/doltcore/sqle/statspro/dolt_stats.go index 8f75b9229e..4a0e8e7ea4 100644 --- a/go/libraries/doltcore/sqle/statspro/dolt_stats.go +++ b/go/libraries/doltcore/sqle/statspro/dolt_stats.go @@ -136,15 +136,23 @@ func NewDoltStats() *DoltStats { return &DoltStats{mu: &sync.Mutex{}, Active: make(map[hash.Hash]int), Statistic: &stats.Statistic{}} } -func (s *DoltStats) ToInterface() interface{} { - ret := s.Statistic.ToInterface().(map[string]interface{}) +func (s *DoltStats) ToInterface() (interface{}, error) { + statVal, err := s.Statistic.ToInterface() + if err != nil { + return nil, err + } + ret := statVal.(map[string]interface{}) var hist sql.Histogram for _, b := range s.Hist { hist = append(hist, b) } - ret["statistic"].(map[string]interface{})["buckets"] = hist.ToInterface() - return ret + histVal, err := hist.ToInterface() + if err != nil { + return nil, err + } + ret["statistic"].(map[string]interface{})["buckets"] = histVal + return ret, nil } func (s *DoltStats) WithHistogram(h sql.Histogram) (sql.Statistic, error) { From 692c76f362efe165c9703e3b6fb7e77426837096 Mon Sep 17 00:00:00 2001 From: Nick Tobey Date: Wed, 24 Apr 2024 10:57:27 -0700 Subject: [PATCH 2/7] Use LazyJSONDocument when reading serialized JSON from tables. --- .../binlog_replication_alltypes_test.go | 14 ++++++++++---- go/libraries/doltcore/sqle/schema_table_test.go | 4 ++-- go/store/prolly/tree/blob_builder.go | 9 +++++++++ go/store/prolly/tree/prolly_fields.go | 5 +++-- go/store/prolly/tree/prolly_fields_test.go | 15 ++++++++++++++- 5 files changed, 38 insertions(+), 9 deletions(-) diff --git a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_alltypes_test.go b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_alltypes_test.go index 37f640f20a..e486b8836e 100644 --- a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_alltypes_test.go +++ b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_alltypes_test.go @@ -15,6 +15,7 @@ package binlogreplication import ( + "encoding/json" "fmt" "math/rand" "strings" @@ -521,11 +522,16 @@ func assertValues(t *testing.T, assertionIndex int, row map[string]interface{}) if typeDesc.TypeDefinition == "json" { // LD_1 and DOLT storage formats return JSON strings slightly differently; DOLT removes spaces // while LD_1 add whitespace, so for json comparison, we sanitize by removing whitespace. - actualValue = strings.ReplaceAll(actualValue, " ", "") + var actual interface{} + json.Unmarshal([]byte(actualValue), &actual) + var expected interface{} + json.Unmarshal([]byte(expectedValue.(string)), &expected) + require.EqualValues(t, expected, actual, + "Failed on assertion %d for for column %q", assertionIndex, typeDesc.ColumnName()) + } else { + require.EqualValues(t, expectedValue, actualValue, + "Failed on assertion %d for for column %q", assertionIndex, typeDesc.ColumnName()) } - - require.EqualValues(t, expectedValue, actualValue, - "Failed on assertion %d for for column %q", assertionIndex, typeDesc.ColumnName()) } } diff --git a/go/libraries/doltcore/sqle/schema_table_test.go b/go/libraries/doltcore/sqle/schema_table_test.go index 09e6d92343..5880988022 100644 --- a/go/libraries/doltcore/sqle/schema_table_test.go +++ b/go/libraries/doltcore/sqle/schema_table_test.go @@ -136,9 +136,9 @@ func TestSchemaTableMigrationV1(t *testing.T) { require.NoError(t, err) // convert the JSONDocument to a string for comparison if row[3] != nil { - jsonDoc, ok := row[3].(gmstypes.JSONStringer) + jsonDoc, ok := row[3].(sql.JSONWrapper) if ok { - row[3], err = jsonDoc.JSONString() + row[3], err = gmstypes.StringifyJSON(jsonDoc) row[3] = strings.ReplaceAll(row[3].(string), " ", "") // remove spaces } diff --git a/go/store/prolly/tree/blob_builder.go b/go/store/prolly/tree/blob_builder.go index 2c8b60c619..69be614c94 100644 --- a/go/store/prolly/tree/blob_builder.go +++ b/go/store/prolly/tree/blob_builder.go @@ -18,6 +18,7 @@ import ( "bytes" "context" "errors" + "github.com/dolthub/go-mysql-server/sql" "io" "github.com/dolthub/go-mysql-server/sql/types" @@ -285,6 +286,14 @@ func (b *JSONDoc) ToJSONDocument(ctx context.Context) (types.JSONDocument, error return doc, err } +func (b *JSONDoc) ToLazyJSONDocument(ctx context.Context) (sql.JSONWrapper, error) { + buf, err := b.bytes(ctx) + if err != nil { + return types.JSONDocument{}, err + } + return types.NewLazyJSONDocument(buf), nil +} + func (b *JSONDoc) ToString(ctx context.Context) (string, error) { buf, err := b.bytes(ctx) if err != nil { diff --git a/go/store/prolly/tree/prolly_fields.go b/go/store/prolly/tree/prolly_fields.go index b8e760154f..860ce66bf5 100644 --- a/go/store/prolly/tree/prolly_fields.go +++ b/go/store/prolly/tree/prolly_fields.go @@ -20,6 +20,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/dolthub/go-mysql-server/sql" "io" "math" "time" @@ -127,7 +128,7 @@ func GetField(ctx context.Context, td val.TupleDesc, i int, tup val.Tuple, ns No var h hash.Hash h, ok = td.GetJSONAddr(i, tup) if ok { - v, err = NewJSONDoc(h, ns).ToJSONDocument(ctx) + v, err = NewJSONDoc(h, ns).ToLazyJSONDocument(ctx) } case val.StringAddrEnc: var h hash.Hash @@ -409,5 +410,5 @@ func convJson(v interface{}) (buf []byte, err error) { if err != nil { return nil, err } - return json.Marshal(v.(types.JSONDocument).Val) + return types.MarshallJson(v.(sql.JSONWrapper)) } diff --git a/go/store/prolly/tree/prolly_fields_test.go b/go/store/prolly/tree/prolly_fields_test.go index e0fefc441d..56aea7d4f0 100644 --- a/go/store/prolly/tree/prolly_fields_test.go +++ b/go/store/prolly/tree/prolly_fields_test.go @@ -17,6 +17,7 @@ package tree import ( "context" "encoding/json" + "github.com/dolthub/go-mysql-server/sql" "math" "testing" "time" @@ -195,7 +196,19 @@ func testRoundTripProllyFields(t *testing.T, test prollyFieldTest) { v, err := GetField(context.Background(), desc, 0, tup, ns) assert.NoError(t, err) - assert.Equal(t, test.value, v) + jsonType := val.Type{Enc: val.JSONAddrEnc} + if test.typ == jsonType { + getJson := func(field interface{}) interface{} { + jsonWrapper, ok := field.(sql.JSONWrapper) + require.Equal(t, ok, true) + val, err := jsonWrapper.ToInterface() + require.NoError(t, err) + return val + } + assert.Equal(t, getJson(test.value), getJson(v)) + } else { + assert.Equal(t, test.value, v) + } } func mustParseGeometryType(t *testing.T, s string) (v interface{}) { From 7629a5556d5b1c482a99b95c1ab6eb06e8582643 Mon Sep 17 00:00:00 2001 From: nicktobey Date: Tue, 30 Apr 2024 02:01:49 +0000 Subject: [PATCH 3/7] [ga-bump-dep] Bump dependency in Dolt by nicktobey --- go/go.mod | 2 +- go/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go/go.mod b/go/go.mod index a63f5221b0..0ffe6aedba 100644 --- a/go/go.mod +++ b/go/go.mod @@ -57,7 +57,7 @@ require ( github.com/cespare/xxhash v1.1.0 github.com/creasty/defaults v1.6.0 github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2 - github.com/dolthub/go-mysql-server v0.18.2-0.20240429214844-6feb67867355 + github.com/dolthub/go-mysql-server v0.18.2-0.20240430015631-3d60d20186c8 github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63 github.com/dolthub/swiss v0.1.0 github.com/goccy/go-json v0.10.2 diff --git a/go/go.sum b/go/go.sum index 1e65e20880..fb8e9f1210 100644 --- a/go/go.sum +++ b/go/go.sum @@ -183,8 +183,8 @@ github.com/dolthub/fslock v0.0.3 h1:iLMpUIvJKMKm92+N1fmHVdxJP5NdyDK5bK7z7Ba2s2U= github.com/dolthub/fslock v0.0.3/go.mod h1:QWql+P17oAAMLnL4HGB5tiovtDuAjdDTPbuqx7bYfa0= github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e h1:kPsT4a47cw1+y/N5SSCkma7FhAPw7KeGmD6c9PBZW9Y= github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e/go.mod h1:KPUcpx070QOfJK1gNe0zx4pA5sicIK1GMikIGLKC168= -github.com/dolthub/go-mysql-server v0.18.2-0.20240429214844-6feb67867355 h1:Dylx0T0J40z3momZ0pDlUm0PWEvPWrcOVkeZ9jFXtVQ= -github.com/dolthub/go-mysql-server v0.18.2-0.20240429214844-6feb67867355/go.mod h1:T6EEu2iQoasR13Ovtp44yDn+rXQOBgh3BACPZMxSF/8= +github.com/dolthub/go-mysql-server v0.18.2-0.20240430015631-3d60d20186c8 h1:Xm6syv6978frTakO8OAvmcwXDEKq1Eij7rJFr6F+BNQ= +github.com/dolthub/go-mysql-server v0.18.2-0.20240430015631-3d60d20186c8/go.mod h1:T6EEu2iQoasR13Ovtp44yDn+rXQOBgh3BACPZMxSF/8= github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63 h1:OAsXLAPL4du6tfbBgK0xXHZkOlos63RdKYS3Sgw/dfI= github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63/go.mod h1:lV7lUeuDhH5thVGDCKXbatwKy2KW80L4rMT46n+Y2/Q= github.com/dolthub/ishell v0.0.0-20221214210346-d7db0b066488 h1:0HHu0GWJH0N6a6keStrHhUAK5/o9LVfkh44pvsV4514= From 0b3caefea700ef338632ba03c93201a45e91fadb Mon Sep 17 00:00:00 2001 From: nicktobey Date: Tue, 30 Apr 2024 06:03:36 +0000 Subject: [PATCH 4/7] [ga-format-pr] Run go/utils/repofmt/format_repo.sh and go/Godeps/update.sh --- go/store/prolly/tree/blob_builder.go | 2 +- go/store/prolly/tree/prolly_fields.go | 2 +- go/store/prolly/tree/prolly_fields_test.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go/store/prolly/tree/blob_builder.go b/go/store/prolly/tree/blob_builder.go index 69be614c94..5f78f5e64a 100644 --- a/go/store/prolly/tree/blob_builder.go +++ b/go/store/prolly/tree/blob_builder.go @@ -18,9 +18,9 @@ import ( "bytes" "context" "errors" - "github.com/dolthub/go-mysql-server/sql" "io" + "github.com/dolthub/go-mysql-server/sql" "github.com/dolthub/go-mysql-server/sql/types" "github.com/goccy/go-json" diff --git a/go/store/prolly/tree/prolly_fields.go b/go/store/prolly/tree/prolly_fields.go index 860ce66bf5..4874692c93 100644 --- a/go/store/prolly/tree/prolly_fields.go +++ b/go/store/prolly/tree/prolly_fields.go @@ -20,11 +20,11 @@ import ( "encoding/json" "errors" "fmt" - "github.com/dolthub/go-mysql-server/sql" "io" "math" "time" + "github.com/dolthub/go-mysql-server/sql" "github.com/dolthub/go-mysql-server/sql/types" "github.com/shopspring/decimal" diff --git a/go/store/prolly/tree/prolly_fields_test.go b/go/store/prolly/tree/prolly_fields_test.go index 56aea7d4f0..fbe3967d62 100644 --- a/go/store/prolly/tree/prolly_fields_test.go +++ b/go/store/prolly/tree/prolly_fields_test.go @@ -17,11 +17,11 @@ package tree import ( "context" "encoding/json" - "github.com/dolthub/go-mysql-server/sql" "math" "testing" "time" + "github.com/dolthub/go-mysql-server/sql" "github.com/dolthub/go-mysql-server/sql/expression/function/spatial" "github.com/dolthub/go-mysql-server/sql/types" "github.com/shopspring/decimal" From 48ef9e86be68b41107442b5ed21b0ad11b877d72 Mon Sep 17 00:00:00 2001 From: Nick Tobey Date: Tue, 30 Apr 2024 11:54:23 -0700 Subject: [PATCH 5/7] Update constraint-violations.bats to expect MySQL's key ordering --- .../bats/constraint-violations.bats | 144 +++++++++--------- 1 file changed, 73 insertions(+), 71 deletions(-) diff --git a/integration-tests/bats/constraint-violations.bats b/integration-tests/bats/constraint-violations.bats index e0f714ff4c..5f45b72a35 100644 --- a/integration-tests/bats/constraint-violations.bats +++ b/integration-tests/bats/constraint-violations.bats @@ -125,7 +125,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -174,7 +174,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -229,8 +229,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -284,8 +284,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -342,7 +342,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,3,3,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,3,3,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -395,8 +395,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -446,7 +446,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -495,7 +495,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -550,8 +550,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -605,8 +605,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -663,7 +663,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,3,3,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,3,3,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -716,8 +716,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -767,7 +767,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -816,7 +816,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -871,8 +871,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -926,8 +926,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -984,7 +984,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,3,3,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,3,3,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1037,8 +1037,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1183,7 +1183,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1235,7 +1235,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1291,8 +1291,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1349,8 +1349,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1408,7 +1408,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,3,3,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,3,3,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1462,8 +1462,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1516,7 +1516,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1568,7 +1568,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1624,8 +1624,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1682,8 +1682,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1741,7 +1741,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,3,3,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,3,3,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1795,8 +1795,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1849,7 +1849,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1901,7 +1901,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -1957,8 +1957,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2015,8 +2015,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2074,7 +2074,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,3,3,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,3,3,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2128,8 +2128,8 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false - [[ "$output" =~ 'foreign key,3,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false + [[ "$output" =~ 'foreign key,3,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2181,7 +2181,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2232,7 +2232,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2283,7 +2283,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2333,7 +2333,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2383,7 +2383,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2433,7 +2433,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""SET NULL"", ""OnUpdate"": ""SET NULL"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2487,7 +2487,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""child"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM parent" -r=csv log_status_eq "0" @@ -2540,7 +2540,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child1" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,20,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_c1"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child1""}"' ]] || false + [[ "$output" =~ 'foreign key,20,2,"{""Index"": ""v1"", ""Table"": ""child1"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_c1"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM dolt_constraint_violations_child2" -r=csv log_status_eq "0" @@ -2602,7 +2602,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child1" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,20,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_c1"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child1""}"' ]] || false + [[ "$output" =~ 'foreign key,20,2,"{""Index"": ""v1"", ""Table"": ""child1"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_c1"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM dolt_constraint_violations_child2" -r=csv log_status_eq "0" @@ -2664,7 +2664,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child1" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,20,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_c1"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child1""}"' ]] || false + [[ "$output" =~ 'foreign key,20,2,"{""Index"": ""v1"", ""Table"": ""child1"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_c1"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM dolt_constraint_violations_child2" -r=csv log_status_eq "0" @@ -2727,7 +2727,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_child1" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,20,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_c1"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""Table"": ""child1""}"' ]] || false + [[ "$output" =~ 'foreign key,20,2,"{""Index"": ""v1"", ""Table"": ""child1"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_c1"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""parent"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM dolt_constraint_violations_child2" -r=csv log_status_eq "0" @@ -2804,8 +2804,9 @@ SQL [[ "${#lines[@]}" = "1" ]] || false run dolt sql -q "SELECT * FROM dolt_constraint_violations_t2" -r=csv log_status_eq "0" + echo $output [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,2,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_t2"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""t1"", ""Table"": ""t2""}"' ]] || false + [[ "$output" =~ 'foreign key,2,2,"{""Index"": ""v1"", ""Table"": ""t2"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_t2"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""t1"", ""ReferencedColumns"": [""v1""]' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM t1" -r=csv log_status_eq "0" @@ -2834,8 +2835,9 @@ SQL [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM dolt_constraint_violations_t1" -r=csv log_status_eq "0" + echo $output [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,20,2,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_t1"", ""Index"": ""v1"", ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ReferencedColumns"": [""v1""], ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""t2"", ""Table"": ""t1""}"' ]] || false + [[ "$output" =~ 'foreign key,20,2,"{""Index"": ""v1"", ""Table"": ""t1"", ""Columns"": [""v1""], ""OnDelete"": ""RESTRICT"", ""OnUpdate"": ""RESTRICT"", ""ForeignKey"": ""fk_t1"", ""ReferencedIndex"": ""v1"", ""ReferencedTable"": ""t2"", ""ReferencedColumns"": [""v1""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM dolt_constraint_violations_t2" -r=csv log_status_eq "0" @@ -2882,7 +2884,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_test" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,4,3,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""pk""], ""ReferencedIndex"": """", ""ReferencedTable"": ""test"", ""Table"": ""test""}"' ]] || false + [[ "$output" =~ 'foreign key,4,3,"{""Index"": ""v1"", ""Table"": ""test"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": """", ""ReferencedTable"": ""test"", ""ReferencedColumns"": [""pk""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM test" -r=csv log_status_eq "0" @@ -2921,7 +2923,7 @@ SQL run dolt sql -q "SELECT * FROM dolt_constraint_violations_test" -r=csv log_status_eq "0" [[ "$output" =~ "violation_type,pk,v1,violation_info" ]] || false - [[ "$output" =~ 'foreign key,4,3,"{""Columns"": [""v1""], ""ForeignKey"": ""fk_name"", ""Index"": ""v1"", ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ReferencedColumns"": [""pk""], ""ReferencedIndex"": """", ""ReferencedTable"": ""test"", ""Table"": ""test""}"' ]] || false + [[ "$output" =~ 'foreign key,4,3,"{""Index"": ""v1"", ""Table"": ""test"", ""Columns"": [""v1""], ""OnDelete"": ""CASCADE"", ""OnUpdate"": ""CASCADE"", ""ForeignKey"": ""fk_name"", ""ReferencedIndex"": """", ""ReferencedTable"": ""test"", ""ReferencedColumns"": [""pk""]}"' ]] || false [[ "${#lines[@]}" = "2" ]] || false run dolt sql -q "SELECT * FROM test" -r=csv log_status_eq "0" @@ -3006,8 +3008,8 @@ SQL run dolt sql -q "SELECT from_root_ish,violation_type,hex(dolt_row_hash) as dolt_row_hash,aColumn,bColumn,violation_info from dolt_constraint_violations_aTable" -r=csv log_status_eq "0" [[ "$output" =~ "from_root_ish,violation_type,dolt_row_hash,aColumn,bColumn,violation_info" ]] || false - [[ "$output" =~ ',unique index,5A1ED8633E1842FCA8EE529E4F1C5944,1,2,"{""Columns"": [""aColumn""], ""Name"": ""aColumn_UNIQUE""}"' ]] || false - [[ "$output" =~ ',unique index,A922BFBF4E5489501A3808BC5CD702C0,1,3,"{""Columns"": [""aColumn""], ""Name"": ""aColumn_UNIQUE""}"' ]] || false + [[ "$output" =~ ',unique index,5A1ED8633E1842FCA8EE529E4F1C5944,1,2,"{""Name"": ""aColumn_UNIQUE"", ""Columns"": [""aColumn""]}"' ]] || false + [[ "$output" =~ ',unique index,A922BFBF4E5489501A3808BC5CD702C0,1,3,"{""Name"": ""aColumn_UNIQUE"", ""Columns"": [""aColumn""]}"' ]] || false [[ "${#lines[@]}" = "3" ]] || false # Fix the violations and clear out the constraint violations artifacts From 9b105e7e25fae7337de3753198d9853eb5565486 Mon Sep 17 00:00:00 2001 From: Nick Tobey Date: Tue, 30 Apr 2024 17:24:22 -0700 Subject: [PATCH 6/7] Update bats tests, and unescape escaped characters in JSON before displaying them. --- .../doltcore/table/typed/json/writer.go | 2 + go/store/prolly/tree/blob_builder.go | 16 ++-- go/store/types/json.go | 48 ++++++++++++ go/store/types/json_test.go | 69 ++++++++++++++++++ integration-tests/bats/json-new-fmt.bats | 62 ++++++++-------- integration-tests/bats/json.bats | 73 ++++++++----------- 6 files changed, 190 insertions(+), 80 deletions(-) create mode 100644 go/store/types/json_test.go diff --git a/go/libraries/doltcore/table/typed/json/writer.go b/go/libraries/doltcore/table/typed/json/writer.go index 0c1d1b7d8c..ac51f92cdc 100644 --- a/go/libraries/doltcore/table/typed/json/writer.go +++ b/go/libraries/doltcore/table/typed/json/writer.go @@ -220,6 +220,8 @@ func (j *RowWriter) jsonDataForSqlSchema(row sql.Row) ([]byte, error) { // This is kind of silly: we are unmarshalling JSON just to marshall it back again // But it makes marshalling much simpler + // Reset val so we don't unmarshall into the old value. + val = nil err = json.Unmarshal([]byte(str), &val) if err != nil { return nil, err diff --git a/go/store/prolly/tree/blob_builder.go b/go/store/prolly/tree/blob_builder.go index 5f78f5e64a..33e3f47fad 100644 --- a/go/store/prolly/tree/blob_builder.go +++ b/go/store/prolly/tree/blob_builder.go @@ -18,10 +18,11 @@ import ( "bytes" "context" "errors" + "github.com/dolthub/dolt/go/store/types" "io" "github.com/dolthub/go-mysql-server/sql" - "github.com/dolthub/go-mysql-server/sql/types" + sqltypes "github.com/dolthub/go-mysql-server/sql/types" "github.com/goccy/go-json" "github.com/dolthub/dolt/go/store/hash" @@ -273,15 +274,15 @@ func NewJSONDoc(addr hash.Hash, ns NodeStore) *JSONDoc { return &JSONDoc{ImmutableTree{Addr: addr, ns: ns}} } -func (b *JSONDoc) ToJSONDocument(ctx context.Context) (types.JSONDocument, error) { +func (b *JSONDoc) ToJSONDocument(ctx context.Context) (sqltypes.JSONDocument, error) { buf, err := b.bytes(ctx) if err != nil { - return types.JSONDocument{}, err + return sqltypes.JSONDocument{}, err } - var doc types.JSONDocument + var doc sqltypes.JSONDocument err = json.Unmarshal(buf, &doc.Val) if err != nil { - return types.JSONDocument{}, err + return sqltypes.JSONDocument{}, err } return doc, err } @@ -289,9 +290,10 @@ func (b *JSONDoc) ToJSONDocument(ctx context.Context) (types.JSONDocument, error func (b *JSONDoc) ToLazyJSONDocument(ctx context.Context) (sql.JSONWrapper, error) { buf, err := b.bytes(ctx) if err != nil { - return types.JSONDocument{}, err + return sqltypes.JSONDocument{}, err } - return types.NewLazyJSONDocument(buf), nil + buf = types.UnescapeHTMLCodepoints(buf) + return sqltypes.NewLazyJSONDocument(buf), nil } func (b *JSONDoc) ToString(ctx context.Context) (string, error) { diff --git a/go/store/types/json.go b/go/store/types/json.go index f1b0e54427..85a308c838 100644 --- a/go/store/types/json.go +++ b/go/store/types/json.go @@ -18,6 +18,7 @@ import ( "context" "errors" "fmt" + "slices" "strings" "github.com/dolthub/dolt/go/store/d" @@ -376,3 +377,50 @@ func compareJSONNumber(a Float, b Value) (int, error) { return 1, nil } } + +// UnescapeHTMLCodepoints replaces escaped HTML characters in serialized JSON with their unescaped equivalents. +// Due to an oversight, the representation of JSON in storage escapes these characters, and we unescape them +// before displaying them to the user. +func UnescapeHTMLCodepoints(path []byte) []byte { + nextToRead := path + nextToWrite := path + + matches := 0 + index := findNextEscapedUnicodeCodepoint(nextToRead) + for index != -1 { + newChar := byte(0) + if slices.Equal(nextToRead[index+2:index+6], []byte{'0', '0', '3', 'c'}) { + newChar = '<' + } else if slices.Equal(nextToRead[index+2:index+6], []byte{'0', '0', '3', 'e'}) { + newChar = '>' + } else if slices.Equal(nextToRead[index+2:index+6], []byte{'0', '0', '2', '6'}) { + newChar = '&' + } + if newChar != 0 { + matches += 1 + copy(nextToWrite, nextToRead[:index]) + nextToWrite[index] = newChar + nextToWrite = nextToWrite[index+1:] + } + nextToRead = nextToRead[index+6:] + index = findNextEscapedUnicodeCodepoint(nextToRead) + } + copy(nextToWrite, nextToRead) + return path[:len(path)-5*matches] +} + +func findNextEscapedUnicodeCodepoint(path []byte) int { + index := 0 + for { + if index >= len(path) { + return -1 + } + if path[index] == '\\' { + if path[index+1] == 'u' { + return index + } + index++ + } + index++ + } +} diff --git a/go/store/types/json_test.go b/go/store/types/json_test.go new file mode 100644 index 0000000000..3573a305fc --- /dev/null +++ b/go/store/types/json_test.go @@ -0,0 +1,69 @@ +// Copyright 2024 Dolthub, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestUnescapeHTMLCodepoints(t *testing.T) { + testCases := []struct { + name string + input []byte + expected []byte + }{ + { + name: "Unescape <", + input: []byte("\\u003c"), + expected: []byte("<"), + }, + { + name: "Unescape >", + input: []byte("\\u003e"), + expected: []byte(">"), + }, + { + name: "Unescape &", + input: []byte("\\u0026"), + expected: []byte("&"), + }, + { + name: "Don't unescape other codepoints", + input: []byte("\\u00ff"), + expected: []byte("\\u00ff"), + }, + { + name: "Escape multiple codepoints", + input: []byte("\\u003c\\u003e\\u0026"), + expected: []byte("<>&"), + }, + { + name: "Don't escape if the \\ is escaped", + input: []byte("\\\\u003c"), + expected: []byte("\\\\u003c"), + }, + { + name: "Escape codepoints w/ surrounding text", + input: []byte("A\\u003cB"), + expected: []byte("A Date: Wed, 1 May 2024 00:31:36 +0000 Subject: [PATCH 7/7] [ga-format-pr] Run go/utils/repofmt/format_repo.sh and go/Godeps/update.sh --- go/store/prolly/tree/blob_builder.go | 2 +- go/store/types/json_test.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/go/store/prolly/tree/blob_builder.go b/go/store/prolly/tree/blob_builder.go index 33e3f47fad..c2578cf0fc 100644 --- a/go/store/prolly/tree/blob_builder.go +++ b/go/store/prolly/tree/blob_builder.go @@ -18,7 +18,6 @@ import ( "bytes" "context" "errors" - "github.com/dolthub/dolt/go/store/types" "io" "github.com/dolthub/go-mysql-server/sql" @@ -27,6 +26,7 @@ import ( "github.com/dolthub/dolt/go/store/hash" "github.com/dolthub/dolt/go/store/prolly/message" + "github.com/dolthub/dolt/go/store/types" ) const DefaultFixedChunkLength = 4000 diff --git a/go/store/types/json_test.go b/go/store/types/json_test.go index 3573a305fc..f1c8f88e4d 100644 --- a/go/store/types/json_test.go +++ b/go/store/types/json_test.go @@ -15,8 +15,9 @@ package types import ( - "github.com/stretchr/testify/assert" "testing" + + "github.com/stretchr/testify/assert" ) func TestUnescapeHTMLCodepoints(t *testing.T) {