Merge pull request #7785 from dolthub/nicktobey/json-serialize

Use `LazyJSONDocument` when reading from a JSON column.
This commit is contained in:
Nick Tobey
2024-04-30 18:12:55 -07:00
committed by GitHub
19 changed files with 344 additions and 189 deletions

View File

@@ -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

View File

@@ -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=

View File

@@ -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
}

View File

@@ -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

View File

@@ -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
}

View File

@@ -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())
}
}

View File

@@ -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.

View File

@@ -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 {

View File

@@ -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,16 +136,9 @@ 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].(sql.JSONWrapper)
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], err = gmstypes.StringifyJSON(jsonDoc)
row[3] = strings.ReplaceAll(row[3].(string), " ", "") // remove spaces
}

View File

@@ -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) {

View File

@@ -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

View File

@@ -20,11 +20,13 @@ import (
"errors"
"io"
"github.com/dolthub/go-mysql-server/sql/types"
"github.com/dolthub/go-mysql-server/sql"
sqltypes "github.com/dolthub/go-mysql-server/sql/types"
"github.com/goccy/go-json"
"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
@@ -272,19 +274,28 @@ 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
}
func (b *JSONDoc) ToLazyJSONDocument(ctx context.Context) (sql.JSONWrapper, error) {
buf, err := b.bytes(ctx)
if err != nil {
return sqltypes.JSONDocument{}, err
}
buf = types.UnescapeHTMLCodepoints(buf)
return sqltypes.NewLazyJSONDocument(buf), nil
}
func (b *JSONDoc) ToString(ctx context.Context) (string, error) {
buf, err := b.bytes(ctx)
if err != nil {

View File

@@ -24,6 +24,7 @@ import (
"math"
"time"
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/types"
"github.com/shopspring/decimal"
@@ -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))
}

View File

@@ -21,6 +21,7 @@ import (
"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"
@@ -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{}) {

View File

@@ -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++
}
}

View File

@@ -0,0 +1,70 @@
// 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 (
"testing"
"github.com/stretchr/testify/assert"
)
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<B")},
}
for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
actual := UnescapeHTMLCodepoints(testCase.input)
assert.Equal(t, testCase.expected, actual)
})
}
}

View File

@@ -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

View File

@@ -32,23 +32,23 @@ SQL
SQL
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""b"": 2}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""b"":2}"' ]
dolt sql <<SQL
UPDATE js SET js = '{"c":3}' WHERE pk = 2;
SQL
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""c"": 3}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""c"":3}"' ]
dolt sql <<SQL
DELETE FROM js WHERE pk = 2;
SQL
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
}
@test "json-new-fmt: JSON value printing" {
@@ -62,18 +62,18 @@ SQL
run dolt sql -q "SELECT * FROM js;"
[ "$status" -eq 0 ]
[ "${lines[0]}" = '+----+----------+' ]
[ "${lines[1]}" = '| pk | js |' ]
[ "${lines[2]}" = '+----+----------+' ]
[ "${lines[3]}" = '| 1 | {"a": 1} |' ]
[ "${lines[4]}" = '| 2 | {"b": 2} |' ]
[ "${lines[5]}" = '+----+----------+' ]
[ "${lines[0]}" = '+----+---------+' ]
[ "${lines[1]}" = '| pk | js |' ]
[ "${lines[2]}" = '+----+---------+' ]
[ "${lines[3]}" = '| 1 | {"a":1} |' ]
[ "${lines[4]}" = '| 2 | {"b":2} |' ]
[ "${lines[5]}" = '+----+---------+' ]
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[0]}" = 'pk,js' ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""b"": 2}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""b"":2}"' ]
dolt sql -q "SELECT * FROM js;" -r json
run dolt sql -q "SELECT * FROM js;" -r json
@@ -113,14 +113,14 @@ SQL
echo "output: $output"
[ "$status" -eq 0 ]
[ "${lines[0]}" = 'diff --dolt a/js b/js' ]
[ "${lines[3]}" = '+---+----+-----------+' ]
[ "${lines[4]}" = '| | pk | js |' ]
[ "${lines[5]}" = '+---+----+-----------+' ]
[ "${lines[6]}" = '| < | 1 | {"a": 1} |' ]
[ "${lines[7]}" = '| > | 1 | {"a": 11} |' ]
[ "${lines[8]}" = '| - | 2 | {"b": 2} |' ]
[ "${lines[9]}" = '| + | 3 | {"c": 3} |' ]
[ "${lines[10]}" = '+---+----+-----------+' ]
[ "${lines[3]}" = '+---+----+----------+' ]
[ "${lines[4]}" = '| | pk | js |' ]
[ "${lines[5]}" = '+---+----+----------+' ]
[ "${lines[6]}" = '| < | 1 | {"a":1} |' ]
[ "${lines[7]}" = '| > | 1 | {"a":11} |' ]
[ "${lines[8]}" = '| - | 2 | {"b":2} |' ]
[ "${lines[9]}" = '| + | 3 | {"c":3} |' ]
[ "${lines[10]}" = '+---+----+----------+' ]
}
@test "json-new-fmt: merge JSON values" {
@@ -151,8 +151,8 @@ SQL
dolt merge other --no-commit
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 11}"' ]
[ "${lines[2]}" = '2,"{""b"": 22}"' ]
[ "${lines[1]}" = '1,"{""a"":11}"' ]
[ "${lines[2]}" = '2,"{""b"":22}"' ]
dolt commit -am "merged other into main"
# test merge conflicts
@@ -169,8 +169,8 @@ SQL
[ "$status" -eq 0 ]
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""b"": 99}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""b"":99}"' ]
}
@test "json-new-fmt: merge JSON values with stored procedure" {
@@ -201,8 +201,8 @@ SQL
dolt merge other --no-commit
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 11}"' ]
[ "${lines[2]}" = '2,"{""b"": 22}"' ]
[ "${lines[1]}" = '1,"{""a"":11}"' ]
[ "${lines[2]}" = '2,"{""b"":22}"' ]
dolt commit -am "merged other into main"
# test merge conflicts
@@ -219,8 +219,8 @@ SQL
[ "$status" -eq 0 ]
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""b"": 99}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""b"":99}"' ]
}
@test "json-new-fmt: insert value with special characters" {
@@ -234,7 +234,7 @@ SQL
run dolt sql -q "SELECT * FROM js;" -r csv
echo "output: $output"
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": ""<>&""}"' ]
[ "${lines[1]}" = '1,"{""a"":""<>&""}"' ]
}
@@ -249,7 +249,7 @@ SQL
run dolt sql -q "SELECT * FROM js;" -r csv
echo "output: $output"
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"[{""a"": ""<>&""}]"' ]
[ "${lines[1]}" = '1,"[{""a"":""<>&""}]"' ]
}
@test "json-new-fmt: json casting behavior" {

View File

@@ -29,23 +29,23 @@ SQL
SQL
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""b"": 2}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""b"":2}"' ]
dolt sql <<SQL
UPDATE js SET js = '{"c":3}' WHERE pk = 2;
SQL
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""c"": 3}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""c"":3}"' ]
dolt sql <<SQL
DELETE FROM js WHERE pk = 2;
SQL
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
}
@test "json: JSON value printing" {
@@ -59,18 +59,18 @@ SQL
run dolt sql -q "SELECT * FROM js;"
[ "$status" -eq 0 ]
[ "${lines[0]}" = '+----+----------+' ]
[ "${lines[1]}" = '| pk | js |' ]
[ "${lines[2]}" = '+----+----------+' ]
[ "${lines[3]}" = '| 1 | {"a": 1} |' ]
[ "${lines[4]}" = '| 2 | {"b": 2} |' ]
[ "${lines[5]}" = '+----+----------+' ]
[ "${lines[0]}" = '+----+---------+' ]
[ "${lines[1]}" = '| pk | js |' ]
[ "${lines[2]}" = '+----+---------+' ]
[ "${lines[3]}" = '| 1 | {"a":1} |' ]
[ "${lines[4]}" = '| 2 | {"b":2} |' ]
[ "${lines[5]}" = '+----+---------+' ]
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[0]}" = 'pk,js' ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""b"": 2}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""b"":2}"' ]
dolt sql -q "SELECT * FROM js;" -r json
run dolt sql -q "SELECT * FROM js;" -r json
@@ -109,14 +109,14 @@ SQL
run dolt diff
[ "$status" -eq 0 ]
[ "${lines[0]}" = 'diff --dolt a/js b/js' ]
[ "${lines[3]}" = '+---+----+-----------+' ]
[ "${lines[4]}" = '| | pk | js |' ]
[ "${lines[5]}" = '+---+----+-----------+' ]
[ "${lines[6]}" = '| < | 1 | {"a": 1} |' ]
[ "${lines[7]}" = '| > | 1 | {"a": 11} |' ]
[ "${lines[8]}" = '| - | 2 | {"b": 2} |' ]
[ "${lines[9]}" = '| + | 3 | {"c": 3} |' ]
[ "${lines[10]}" = '+---+----+-----------+' ]
[ "${lines[3]}" = '+---+----+----------+' ]
[ "${lines[4]}" = '| | pk | js |' ]
[ "${lines[5]}" = '+---+----+----------+' ]
[ "${lines[6]}" = '| < | 1 | {"a":1} |' ]
[ "${lines[7]}" = '| > | 1 | {"a":11} |' ]
[ "${lines[8]}" = '| - | 2 | {"b":2} |' ]
[ "${lines[9]}" = '| + | 3 | {"c":3} |' ]
[ "${lines[10]}" = '+---+----+----------+' ]
}
@test "json: merge JSON values" {
@@ -147,8 +147,8 @@ SQL
dolt merge other --no-commit
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 11}"' ]
[ "${lines[2]}" = '2,"{""b"": 22}"' ]
[ "${lines[1]}" = '1,"{""a"":11}"' ]
[ "${lines[2]}" = '2,"{""b"":22}"' ]
dolt commit -am "merged other into main"
# test merge conflicts
@@ -165,8 +165,8 @@ SQL
[ "$status" -eq 0 ]
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""b"": 99}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""b"":99}"' ]
}
@test "json: merge JSON values with stored procedure" {
@@ -197,8 +197,8 @@ SQL
dolt merge other --no-commit
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 11}"' ]
[ "${lines[2]}" = '2,"{""b"": 22}"' ]
[ "${lines[1]}" = '1,"{""a"":11}"' ]
[ "${lines[2]}" = '2,"{""b"":22}"' ]
dolt commit -am "merged other into main"
# test merge conflicts
@@ -215,8 +215,8 @@ SQL
[ "$status" -eq 0 ]
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": 1}"' ]
[ "${lines[2]}" = '2,"{""b"": 99}"' ]
[ "${lines[1]}" = '1,"{""a"":1}"' ]
[ "${lines[2]}" = '2,"{""b"":99}"' ]
}
@test "json: insert value with special characters" {
@@ -229,7 +229,7 @@ SQL
SQL
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"{""a"": ""<>&""}"' ]
[ "${lines[1]}" = '1,"{""a"":""<>&""}"' ]
}
@@ -243,16 +243,5 @@ SQL
SQL
run dolt sql -q "SELECT * FROM js;" -r csv
[ "$status" -eq 0 ]
[ "${lines[1]}" = '1,"[{""a"": ""<>&""}]"' ]
}
@test "json: insert json object with keys out of order" {
# JSON map keys are sorted k by length then alphabetically
dolt sql <<SQL
create table tmp (j json);
insert into tmp values ('{"name":"BillyBob", "os":"Mac", "resolution":{"x":1920, "y":1080}}');
SQL
run dolt sql -q "SELECT * FROM tmp;"
[ "$status" -eq 0 ]
[[ "${lines[3]}" =~ '{"os": "Mac", "name": "BillyBob", "resolution": {"x": 1920, "y": 1080}}' ]] || false
[ "${lines[1]}" = '1,"[{""a"":""<>&""}]"' ]
}