diff --git a/d2compiler/compile.go b/d2compiler/compile.go index 2e4d75c3b..51014adc0 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -666,7 +666,7 @@ func (c *compiler) compileSQLTable(obj *d2graph.Object) { obj.SQLTable = &d2target.SQLTable{} parentID := obj.Parent.AbsID() - tableID := obj.AbsID() + prefixTableID := obj.AbsID() + "." for _, col := range obj.ChildrenArray { if col.IDVal == "style" { continue @@ -702,7 +702,7 @@ func (c *compiler) compileSQLTable(obj *d2graph.Object) { srcID := e.Src.AbsID() dstID := e.Dst.AbsID() // skip edges between columns of the same table - if strings.HasPrefix(srcID, tableID) && strings.HasPrefix(dstID, tableID) { + if strings.HasPrefix(srcID, prefixTableID) && strings.HasPrefix(dstID, prefixTableID) { continue } if srcID == absID { diff --git a/d2compiler/compile_test.go b/d2compiler/compile_test.go index 52a2e3149..ddb51cf8c 100644 --- a/d2compiler/compile_test.go +++ b/d2compiler/compile_test.go @@ -1843,6 +1843,31 @@ choo: { expErr: `d2/testdata/d2compiler/TestCompile/sql-panic.d2:3:27: constraint value must be a string `, }, + { + name: "wrong_column_index", + text: `Chinchillas: { + shape: sql_table + id: int {constraint: primary_key} + whisker_len: int + fur_color: string + age: int + server: int {constraint: foreign_key} + caretaker: int {constraint: foreign_key} +} + +Chinchillas_Collectibles: { + shape: sql_table + id: int + collectible: id {constraint: foreign_key} + chinchilla: id {constraint: foreign_key} +} + +Chinchillas_Collectibles.chinchilla -> Chinchillas.id`, + assertions: func(t *testing.T, g *d2graph.Graph) { + tassert.Equal(t, 0, *g.Edges[0].DstTableColumnIndex) + tassert.Equal(t, 2, *g.Edges[0].SrcTableColumnIndex) + }, + }, } for _, tc := range testCases { diff --git a/e2etests/regression_test.go b/e2etests/regression_test.go index aa8ca3b37..09468d493 100644 --- a/e2etests/regression_test.go +++ b/e2etests/regression_test.go @@ -284,6 +284,27 @@ table with short col: RefreshAuthorizationPolicyCache { class -> table -> table with short col `, }, + { + name: "wrong_table_column", + script: `Chinchillas: { + shape: sql_table + id: int {constraint: primary_key} + whisker_len: int + fur_color: string + age: int + server: int {constraint: foreign_key} + caretaker: int {constraint: foreign_key} +} + +Chinchillas_Collectibles: { + shape: sql_table + id: int + collectible: id {constraint: foreign_key} + chinchilla: id {constraint: foreign_key} +} + +Chinchillas_Collectibles.chinchilla -> Chinchillas.id`, + }, } runa(t, tcs) diff --git a/e2etests/testdata/regression/wrong_table_column/dagre/board.exp.json b/e2etests/testdata/regression/wrong_table_column/dagre/board.exp.json new file mode 100644 index 000000000..6f2224f03 --- /dev/null +++ b/e2etests/testdata/regression/wrong_table_column/dagre/board.exp.json @@ -0,0 +1,394 @@ +{ + "name": "", + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "Chinchillas", + "type": "sql_table", + "pos": { + "x": 19, + "y": 244 + }, + "width": 259, + "height": 252, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#0A0F25", + "stroke": "#FFFFFF", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": [ + { + "name": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 15, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "primary_key", + "reference": "" + }, + { + "name": { + "label": "whisker_len", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 101, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "fur_color", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 77, + "labelHeight": 26 + }, + "type": { + "label": "string", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 48, + "labelHeight": 26 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "age", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 30, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "server", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 52, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "foreign_key", + "reference": "" + }, + { + "name": { + "label": "caretaker", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 80, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "foreign_key", + "reference": "" + } + ], + "label": "Chinchillas", + "fontSize": 20, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 120, + "labelHeight": 36, + "zIndex": 0, + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" + }, + { + "id": "Chinchillas_Collectibles", + "type": "sql_table", + "pos": { + "x": 0, + "y": 0 + }, + "width": 297, + "height": 144, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#0A0F25", + "stroke": "#FFFFFF", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": [ + { + "name": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 15, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "collectible", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 88, + "labelHeight": 26 + }, + "type": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 15, + "labelHeight": 26 + }, + "constraint": "foreign_key", + "reference": "" + }, + { + "name": { + "label": "chinchilla", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 80, + "labelHeight": 26 + }, + "type": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 15, + "labelHeight": 26 + }, + "constraint": "foreign_key", + "reference": "Chinchillas.id" + } + ], + "label": "Chinchillas_Collectibles", + "fontSize": 20, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 257, + "labelHeight": 36, + "zIndex": 0, + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" + } + ], + "connections": [ + { + "id": "(Chinchillas_Collectibles -> Chinchillas)[0]", + "src": "Chinchillas_Collectibles", + "srcArrow": "none", + "srcLabel": "", + "dst": "Chinchillas", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 148.5, + "y": 144 + }, + { + "x": 148.5, + "y": 184 + }, + { + "x": 148.5, + "y": 204 + }, + { + "x": 148.5, + "y": 244 + } + ], + "isCurve": true, + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ] +} diff --git a/e2etests/testdata/regression/wrong_table_column/dagre/sketch.exp.svg b/e2etests/testdata/regression/wrong_table_column/dagre/sketch.exp.svg new file mode 100644 index 000000000..85c13996e --- /dev/null +++ b/e2etests/testdata/regression/wrong_table_column/dagre/sketch.exp.svg @@ -0,0 +1,49 @@ + +Chinchillasid +int +PKwhisker_len +int +fur_color +string +age +int +server +int +FKcaretaker +int +FKChinchillas_Collectiblesid +int +collectible +id +FKchinchilla +id +FK + + + \ No newline at end of file diff --git a/e2etests/testdata/regression/wrong_table_column/elk/board.exp.json b/e2etests/testdata/regression/wrong_table_column/elk/board.exp.json new file mode 100644 index 000000000..2164a914a --- /dev/null +++ b/e2etests/testdata/regression/wrong_table_column/elk/board.exp.json @@ -0,0 +1,385 @@ +{ + "name": "", + "fontFamily": "SourceSansPro", + "shapes": [ + { + "id": "Chinchillas", + "type": "sql_table", + "pos": { + "x": 31, + "y": 256 + }, + "width": 259, + "height": 252, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#0A0F25", + "stroke": "#FFFFFF", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": [ + { + "name": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 15, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "primary_key", + "reference": "" + }, + { + "name": { + "label": "whisker_len", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 101, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "fur_color", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 77, + "labelHeight": 26 + }, + "type": { + "label": "string", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 48, + "labelHeight": 26 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "age", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 30, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "server", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 52, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "foreign_key", + "reference": "" + }, + { + "name": { + "label": "caretaker", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 80, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "foreign_key", + "reference": "" + } + ], + "label": "Chinchillas", + "fontSize": 20, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 120, + "labelHeight": 36, + "zIndex": 0, + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" + }, + { + "id": "Chinchillas_Collectibles", + "type": "sql_table", + "pos": { + "x": 12, + "y": 12 + }, + "width": 297, + "height": 144, + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "borderRadius": 0, + "fill": "#0A0F25", + "stroke": "#FFFFFF", + "shadow": false, + "3d": false, + "multiple": false, + "tooltip": "", + "link": "", + "icon": null, + "iconPosition": "", + "blend": false, + "fields": null, + "methods": null, + "columns": [ + { + "name": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 15, + "labelHeight": 26 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 23, + "labelHeight": 26 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "collectible", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 88, + "labelHeight": 26 + }, + "type": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 15, + "labelHeight": 26 + }, + "constraint": "foreign_key", + "reference": "" + }, + { + "name": { + "label": "chinchilla", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 80, + "labelHeight": 26 + }, + "type": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 15, + "labelHeight": 26 + }, + "constraint": "foreign_key", + "reference": "Chinchillas.id" + } + ], + "label": "Chinchillas_Collectibles", + "fontSize": 20, + "fontFamily": "DEFAULT", + "language": "", + "color": "#0A0F25", + "italic": false, + "bold": true, + "underline": false, + "labelWidth": 257, + "labelHeight": 36, + "zIndex": 0, + "level": 1, + "primaryAccentColor": "#0D32B2", + "secondaryAccentColor": "#4A6FF3", + "neutralAccentColor": "#676C7E" + } + ], + "connections": [ + { + "id": "(Chinchillas_Collectibles -> Chinchillas)[0]", + "src": "Chinchillas_Collectibles", + "srcArrow": "none", + "srcLabel": "", + "dst": "Chinchillas", + "dstArrow": "triangle", + "dstLabel": "", + "opacity": 1, + "strokeDash": 0, + "strokeWidth": 2, + "stroke": "#0D32B2", + "label": "", + "fontSize": 16, + "fontFamily": "DEFAULT", + "language": "", + "color": "#676C7E", + "italic": true, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0, + "labelPosition": "", + "labelPercentage": 0, + "route": [ + { + "x": 160.5, + "y": 156 + }, + { + "x": 160.5, + "y": 256 + } + ], + "animated": false, + "tooltip": "", + "icon": null, + "zIndex": 0 + } + ] +} diff --git a/e2etests/testdata/regression/wrong_table_column/elk/sketch.exp.svg b/e2etests/testdata/regression/wrong_table_column/elk/sketch.exp.svg new file mode 100644 index 000000000..e579c2f59 --- /dev/null +++ b/e2etests/testdata/regression/wrong_table_column/elk/sketch.exp.svg @@ -0,0 +1,49 @@ + +Chinchillasid +int +PKwhisker_len +int +fur_color +string +age +int +server +int +FKcaretaker +int +FKChinchillas_Collectiblesid +int +collectible +id +FKchinchilla +id +FK + + + \ No newline at end of file diff --git a/testdata/d2compiler/TestCompile/wrong_column_index.exp.json b/testdata/d2compiler/TestCompile/wrong_column_index.exp.json new file mode 100644 index 000000000..8b5df5ba5 --- /dev/null +++ b/testdata/d2compiler/TestCompile/wrong_column_index.exp.json @@ -0,0 +1,1163 @@ +{ + "graph": { + "ast": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,0:0:0-17:53:406", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,0:0:0-8:1:204", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,0:0:0-0:11:11", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,0:0:0-0:11:11", + "value": [ + { + "string": "Chinchillas", + "raw_string": "Chinchillas" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,0:13:13-8:0:203", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,1:2:17-1:18:33", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,1:2:17-1:7:22", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,1:2:17-1:7:22", + "value": [ + { + "string": "shape", + "raw_string": "shape" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,1:9:24-1:18:33", + "value": [ + { + "string": "sql_table", + "raw_string": "sql_table" + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,2:2:36-2:35:69", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,2:2:36-2:4:38", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,2:2:36-2:4:38", + "value": [ + { + "string": "id", + "raw_string": "id" + } + ] + } + } + ] + }, + "primary": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,2:6:40-2:9:43", + "value": [ + { + "string": "int", + "raw_string": "int" + } + ] + } + }, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,2:10:44-2:34:68", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,2:11:45-2:34:68", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,2:11:45-2:21:55", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,2:11:45-2:21:55", + "value": [ + { + "string": "constraint", + "raw_string": "constraint" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,2:23:57-2:34:68", + "value": [ + { + "string": "primary_key", + "raw_string": "primary_key" + } + ] + } + } + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,3:2:72-3:18:88", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,3:2:72-3:13:83", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,3:2:72-3:13:83", + "value": [ + { + "string": "whisker_len", + "raw_string": "whisker_len" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,3:15:85-3:18:88", + "value": [ + { + "string": "int", + "raw_string": "int" + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,4:2:91-4:19:108", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,4:2:91-4:11:100", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,4:2:91-4:11:100", + "value": [ + { + "string": "fur_color", + "raw_string": "fur_color" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,4:13:102-4:19:108", + "value": [ + { + "string": "string", + "raw_string": "string" + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,5:2:111-5:10:119", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,5:2:111-5:5:114", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,5:2:111-5:5:114", + "value": [ + { + "string": "age", + "raw_string": "age" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,5:7:116-5:10:119", + "value": [ + { + "string": "int", + "raw_string": "int" + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,6:2:122-6:39:159", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,6:2:122-6:8:128", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,6:2:122-6:8:128", + "value": [ + { + "string": "server", + "raw_string": "server" + } + ] + } + } + ] + }, + "primary": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,6:10:130-6:13:133", + "value": [ + { + "string": "int", + "raw_string": "int" + } + ] + } + }, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,6:14:134-6:38:158", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,6:15:135-6:38:158", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,6:15:135-6:25:145", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,6:15:135-6:25:145", + "value": [ + { + "string": "constraint", + "raw_string": "constraint" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,6:27:147-6:38:158", + "value": [ + { + "string": "foreign_key", + "raw_string": "foreign_key" + } + ] + } + } + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,7:2:162-7:42:202", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,7:2:162-7:11:171", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,7:2:162-7:11:171", + "value": [ + { + "string": "caretaker", + "raw_string": "caretaker" + } + ] + } + } + ] + }, + "primary": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,7:13:173-7:16:176", + "value": [ + { + "string": "int", + "raw_string": "int" + } + ] + } + }, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,7:17:177-7:41:201", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,7:18:178-7:41:201", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,7:18:178-7:28:188", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,7:18:178-7:28:188", + "value": [ + { + "string": "constraint", + "raw_string": "constraint" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,7:30:190-7:41:201", + "value": [ + { + "string": "foreign_key", + "raw_string": "foreign_key" + } + ] + } + } + } + } + ] + } + } + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,10:0:206-15:1:351", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,10:0:206-10:24:230", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,10:0:206-10:24:230", + "value": [ + { + "string": "Chinchillas_Collectibles", + "raw_string": "Chinchillas_Collectibles" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,10:26:232-15:0:350", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,11:2:236-11:18:252", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,11:2:236-11:7:241", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,11:2:236-11:7:241", + "value": [ + { + "string": "shape", + "raw_string": "shape" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,11:9:243-11:18:252", + "value": [ + { + "string": "sql_table", + "raw_string": "sql_table" + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,12:2:255-12:9:262", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,12:2:255-12:4:257", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,12:2:255-12:4:257", + "value": [ + { + "string": "id", + "raw_string": "id" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,12:6:259-12:9:262", + "value": [ + { + "string": "int", + "raw_string": "int" + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,13:2:265-13:43:306", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,13:2:265-13:13:276", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,13:2:265-13:13:276", + "value": [ + { + "string": "collectible", + "raw_string": "collectible" + } + ] + } + } + ] + }, + "primary": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,13:15:278-13:17:280", + "value": [ + { + "string": "id", + "raw_string": "id" + } + ] + } + }, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,13:18:281-13:42:305", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,13:19:282-13:42:305", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,13:19:282-13:29:292", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,13:19:282-13:29:292", + "value": [ + { + "string": "constraint", + "raw_string": "constraint" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,13:31:294-13:42:305", + "value": [ + { + "string": "foreign_key", + "raw_string": "foreign_key" + } + ] + } + } + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,14:2:309-14:42:349", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,14:2:309-14:12:319", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,14:2:309-14:12:319", + "value": [ + { + "string": "chinchilla", + "raw_string": "chinchilla" + } + ] + } + } + ] + }, + "primary": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,14:14:321-14:16:323", + "value": [ + { + "string": "id", + "raw_string": "id" + } + ] + } + }, + "value": { + "map": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,14:17:324-14:41:348", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,14:18:325-14:41:348", + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,14:18:325-14:28:335", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,14:18:325-14:28:335", + "value": [ + { + "string": "constraint", + "raw_string": "constraint" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,14:30:337-14:41:348", + "value": [ + { + "string": "foreign_key", + "raw_string": "foreign_key" + } + ] + } + } + } + } + ] + } + } + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:0:353-17:53:406", + "edges": [ + { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:0:353-17:53:406", + "src": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:0:353-17:36:389", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:0:353-17:24:377", + "value": [ + { + "string": "Chinchillas_Collectibles", + "raw_string": "Chinchillas_Collectibles" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:25:378-17:35:388", + "value": [ + { + "string": "chinchilla", + "raw_string": "chinchilla" + } + ] + } + } + ] + }, + "src_arrow": "", + "dst": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:38:391-17:53:406", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:39:392-17:50:403", + "value": [ + { + "string": "Chinchillas", + "raw_string": "Chinchillas" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:51:404-17:53:406", + "value": [ + { + "string": "id", + "raw_string": "id" + } + ] + } + } + ] + }, + "dst_arrow": ">" + } + ], + "primary": {}, + "value": {} + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "attributes": { + "label": { + "value": "" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + } + }, + "zIndex": 0 + }, + "edges": [ + { + "index": 0, + "minWidth": 0, + "minHeight": 0, + "srcTableColumnIndex": 2, + "dstTableColumnIndex": 0, + "label_dimensions": { + "width": 0, + "height": 0 + }, + "isCurve": false, + "src_arrow": false, + "dst_arrow": true, + "references": [ + { + "map_key_edge_index": 0 + } + ], + "attributes": { + "label": { + "value": "" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + } + }, + "zIndex": 0 + } + ], + "objects": [ + { + "id": "Chinchillas", + "id_val": "Chinchillas", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "references": [ + { + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,0:0:0-0:11:11", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,0:0:0-0:11:11", + "value": [ + { + "string": "Chinchillas", + "raw_string": "Chinchillas" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + }, + { + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:38:391-17:53:406", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:39:392-17:50:403", + "value": [ + { + "string": "Chinchillas", + "raw_string": "Chinchillas" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:51:404-17:53:406", + "value": [ + { + "string": "id", + "raw_string": "id" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + } + ], + "sql_table": { + "columns": [ + { + "name": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "primary_key", + "reference": "" + }, + { + "name": { + "label": "whisker_len", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "fur_color", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "string", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "age", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "server", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "foreign_key", + "reference": "" + }, + { + "name": { + "label": "caretaker", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "foreign_key", + "reference": "" + } + ] + }, + "attributes": { + "label": { + "value": "Chinchillas" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "sql_table" + }, + "direction": { + "value": "" + } + }, + "zIndex": 0 + }, + { + "id": "Chinchillas_Collectibles", + "id_val": "Chinchillas_Collectibles", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "references": [ + { + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,10:0:206-10:24:230", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,10:0:206-10:24:230", + "value": [ + { + "string": "Chinchillas_Collectibles", + "raw_string": "Chinchillas_Collectibles" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + }, + { + "key": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:0:353-17:36:389", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:0:353-17:24:377", + "value": [ + { + "string": "Chinchillas_Collectibles", + "raw_string": "Chinchillas_Collectibles" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2compiler/TestCompile/wrong_column_index.d2,17:25:378-17:35:388", + "value": [ + { + "string": "chinchilla", + "raw_string": "chinchilla" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": 0 + } + ], + "sql_table": { + "columns": [ + { + "name": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "int", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "", + "reference": "" + }, + { + "name": { + "label": "collectible", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "foreign_key", + "reference": "" + }, + { + "name": { + "label": "chinchilla", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "id", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "foreign_key", + "reference": "Chinchillas.id" + } + ] + }, + "attributes": { + "label": { + "value": "Chinchillas_Collectibles" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "sql_table" + }, + "direction": { + "value": "" + } + }, + "zIndex": 0 + } + ] + }, + "err": null +}