diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 1ed616972..02a599e54 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -13,3 +13,4 @@ - Watch mode only fits to screen on initial load. [#601](https://github.com/terrastruct/d2/pull/601) - Dimensions (`width`/`height`) were incorrectly giving compiler errors when applied on a shape with style. [#614](https://github.com/terrastruct/d2/pull/614) - `near` would collide with labels if they were on the diagram boundaries in the same position. [#617](https://github.com/terrastruct/d2/pull/617) +- Fixes routing between sql table columns if the column name is the prefix of the table name [#615](https://github.com/terrastruct/d2/pull/615) diff --git a/d2compiler/compile.go b/d2compiler/compile.go index 9b3edefd8..48498a767 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() + tableIDPrefix := 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, tableIDPrefix) && strings.HasPrefix(dstID, tableIDPrefix) { continue } if srcID == absID { diff --git a/d2compiler/compile_test.go b/d2compiler/compile_test.go index 885a48da2..81db413f2 100644 --- a/d2compiler/compile_test.go +++ b/d2compiler/compile_test.go @@ -1852,6 +1852,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/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 +}