diff --git a/d2oracle/edit.go b/d2oracle/edit.go index 92053c58e..7ec8eaefc 100644 --- a/d2oracle/edit.go +++ b/d2oracle/edit.go @@ -919,8 +919,7 @@ func deleteObject(g *d2graph.Graph, key *d2ast.KeyPath, obj *d2graph.Object) (*d return !isSpecial }) if obj.Attributes.Shape.Value == d2target.ShapeSQLTable || obj.Attributes.Shape.Value == d2target.ShapeClass { - ref.MapKey.Value.Map = nil - ref.MapKey.Primary = ref.MapKey.Value.ScalarBox() + deleteFromMap(ref.Scope, ref.MapKey) } else if len(withoutSpecial) == 0 { hoistRefChildren(g, key, ref) deleteFromMap(ref.Scope, ref.MapKey) diff --git a/d2oracle/edit_test.go b/d2oracle/edit_test.go index 3e093033d..3f10dfe4a 100644 --- a/d2oracle/edit_test.go +++ b/d2oracle/edit_test.go @@ -3399,6 +3399,44 @@ func TestDelete(t *testing.T) { exp: `x.y.z -> y.b `, }, + { + name: "table_refs", + + text: `a: { + shape: sql_table + b +} +c: { + shape: sql_table + d +} + +a.b +a.b -> c.d +`, + key: `a`, + + exp: `c: { + shape: sql_table + d +} +c.d +`, + }, + { + name: "class_refs", + + text: `a: { + shape: class + b: int +} + +a.b +`, + key: `a`, + + exp: ``, + }, { name: "edge_both_identical_childs", @@ -4740,7 +4778,6 @@ a -> b shape: sql_table id: int {constraint: primary_key} } - disks.id AWS S3 Vancouver -> disks diff --git a/testdata/d2oracle/TestDelete/chaos_1.exp.json b/testdata/d2oracle/TestDelete/chaos_1.exp.json index a012ee54a..ed3ab9d08 100644 --- a/testdata/d2oracle/TestDelete/chaos_1.exp.json +++ b/testdata/d2oracle/TestDelete/chaos_1.exp.json @@ -3,7 +3,7 @@ "name": "", "isFolderOnly": false, "ast": { - "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,0:0:0-8:0:94", + "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,0:0:0-6:0:92", "nodes": [ { "map_key": { @@ -221,13 +221,13 @@ }, { "map_key": { - "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,7:0:91-7:2:93", + "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,5:0:89-5:2:91", "key": { - "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,7:0:91-7:2:93", + "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,5:0:89-5:2:91", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,7:0:91-7:2:93", + "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,5:0:89-5:2:91", "value": [ { "string": "cm", @@ -392,11 +392,11 @@ }, { "key": { - "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,7:0:91-7:2:93", + "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,5:0:89-5:2:91", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,7:0:91-7:2:93", + "range": "d2/testdata/d2oracle/TestDelete/chaos_1.d2,5:0:89-5:2:91", "value": [ { "string": "cm", diff --git a/testdata/d2oracle/TestDelete/class_refs.exp.json b/testdata/d2oracle/TestDelete/class_refs.exp.json new file mode 100644 index 000000000..a46a51904 --- /dev/null +++ b/testdata/d2oracle/TestDelete/class_refs.exp.json @@ -0,0 +1,38 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "d2/testdata/d2oracle/TestDelete/class_refs.d2,0:0:0-0:0:0", + "nodes": null + }, + "root": { + "id": "", + "id_val": "", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "attributes": { + "label": { + "value": "" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": { + "value": "" + } + }, + "zIndex": 0 + }, + "edges": null, + "objects": null + }, + "err": "" +} diff --git a/testdata/d2oracle/TestDelete/shape_class.exp.json b/testdata/d2oracle/TestDelete/shape_class.exp.json index 9cffa89e8..a44a1e71c 100644 --- a/testdata/d2oracle/TestDelete/shape_class.exp.json +++ b/testdata/d2oracle/TestDelete/shape_class.exp.json @@ -3,17 +3,17 @@ "name": "", "isFolderOnly": false, "ast": { - "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,0:0:0-2:0:39", + "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,0:0:0-1:0:38", "nodes": [ { "map_key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,1:0:1-1:37:38", + "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,0:0:0-0:37:37", "key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,1:0:1-1:37:38", + "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,0:0:0-0:37:37", "path": [ { "double_quoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,1:0:1-1:37:38", + "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,0:0:0-0:37:37", "value": [ { "string": "github.com/terrastruct/d2parser.git", @@ -67,11 +67,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,1:0:1-1:37:38", + "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,0:0:0-0:37:37", "path": [ { "double_quoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,1:0:1-1:37:38", + "range": "d2/testdata/d2oracle/TestDelete/shape_class.d2,0:0:0-0:37:37", "value": [ { "string": "github.com/terrastruct/d2parser.git", diff --git a/testdata/d2oracle/TestDelete/shape_sql_table.exp.json b/testdata/d2oracle/TestDelete/shape_sql_table.exp.json index d86497638..a77912978 100644 --- a/testdata/d2oracle/TestDelete/shape_sql_table.exp.json +++ b/testdata/d2oracle/TestDelete/shape_sql_table.exp.json @@ -3,11 +3,11 @@ "name": "", "isFolderOnly": false, "ast": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,0:0:0-10:0:128", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,0:0:0-9:0:125", "nodes": [ { "map_key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,0:0:0-9:1:127", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,0:0:0-8:1:124", "key": { "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,0:0:0-0:5:5", "path": [ @@ -27,7 +27,7 @@ "primary": {}, "value": { "map": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,0:7:7-9:0:126", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,0:7:7-8:0:123", "nodes": [ { "map_key": { @@ -165,13 +165,13 @@ }, { "map_key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,6:2:88-6:10:96", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,5:2:85-5:10:93", "key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,6:2:88-6:10:96", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,5:2:85-5:10:93", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,6:2:88-6:7:93", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,5:2:85-5:7:90", "value": [ { "string": "disks", @@ -182,7 +182,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,6:8:94-6:10:96", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,5:8:91-5:10:93", "value": [ { "string": "id", @@ -199,16 +199,16 @@ }, { "map_key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:2:100-8:27:125", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:2:97-7:27:122", "edges": [ { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:2:100-8:27:125", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:2:97-7:27:122", "src": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:2:100-8:19:117", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:2:97-7:19:114", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:2:100-8:18:116", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:2:97-7:18:113", "value": [ { "string": "AWS S3 Vancouver", @@ -221,11 +221,11 @@ }, "src_arrow": "", "dst": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:21:119-8:27:125", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:21:116-7:27:122", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:22:120-8:27:125", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:22:117-7:27:122", "value": [ { "string": "disks", @@ -389,11 +389,11 @@ }, { "key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,6:2:88-6:10:96", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,5:2:85-5:10:93", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,6:2:88-6:7:93", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,5:2:85-5:7:90", "value": [ { "string": "disks", @@ -404,7 +404,7 @@ }, { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,6:8:94-6:10:96", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,5:8:91-5:10:93", "value": [ { "string": "id", @@ -420,11 +420,11 @@ }, { "key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:21:119-8:27:125", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:21:116-7:27:122", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:22:120-8:27:125", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:22:117-7:27:122", "value": [ { "string": "disks", @@ -499,11 +499,11 @@ "references": [ { "key": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:2:100-8:19:117", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:2:97-7:19:114", "path": [ { "unquoted_string": { - "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,8:2:100-8:18:116", + "range": "d2/testdata/d2oracle/TestDelete/shape_sql_table.d2,7:2:97-7:18:113", "value": [ { "string": "AWS S3 Vancouver", diff --git a/testdata/d2oracle/TestDelete/table_refs.exp.json b/testdata/d2oracle/TestDelete/table_refs.exp.json new file mode 100644 index 000000000..2925b06d7 --- /dev/null +++ b/testdata/d2oracle/TestDelete/table_refs.exp.json @@ -0,0 +1,269 @@ +{ + "graph": { + "name": "", + "isFolderOnly": false, + "ast": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,0:0:0-5:0:34", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,0:0:0-3:1:29", + "key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,0:0:0-0:1:1", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "map": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,0:3:3-3:0:28", + "nodes": [ + { + "map_key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,1:2:7-1:18:23", + "key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,1:2:7-1:7:12", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,1:2:7-1:7:12", + "value": [ + { + "string": "shape", + "raw_string": "shape" + } + ] + } + } + ] + }, + "primary": {}, + "value": { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,1:9:14-1:18:23", + "value": [ + { + "string": "sql_table", + "raw_string": "sql_table" + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,2:2:26-2:3:27", + "key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,2:2:26-2:3:27", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,2:2:26-2:3:27", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + } + ] + } + } + } + }, + { + "map_key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,4:0:30-4:3:33", + "key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,4:0:30-4:3:33", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,4:0:30-4:1:31", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,4:2:32-4:3:33", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "primary": {}, + "value": {} + } + } + ] + }, + "root": { + "id": "", + "id_val": "", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "attributes": { + "label": { + "value": "" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "" + }, + "direction": { + "value": "" + }, + "constraint": { + "value": "" + } + }, + "zIndex": 0 + }, + "edges": null, + "objects": [ + { + "id": "c", + "id_val": "c", + "label_dimensions": { + "width": 0, + "height": 0 + }, + "references": [ + { + "key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,0:0:0-0:1:1", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,0:0:0-0:1:1", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + }, + { + "key": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,4:0:30-4:3:33", + "path": [ + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,4:0:30-4:1:31", + "value": [ + { + "string": "c", + "raw_string": "c" + } + ] + } + }, + { + "unquoted_string": { + "range": "d2/testdata/d2oracle/TestDelete/table_refs.d2,4:2:32-4:3:33", + "value": [ + { + "string": "d", + "raw_string": "d" + } + ] + } + } + ] + }, + "key_path_index": 0, + "map_key_edge_index": -1 + } + ], + "sql_table": { + "columns": [ + { + "name": { + "label": "d", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "type": { + "label": "", + "fontSize": 0, + "fontFamily": "", + "language": "", + "color": "", + "italic": false, + "bold": false, + "underline": false, + "labelWidth": 0, + "labelHeight": 0 + }, + "constraint": "", + "reference": "" + } + ] + }, + "attributes": { + "label": { + "value": "c" + }, + "style": {}, + "near_key": null, + "shape": { + "value": "sql_table" + }, + "direction": { + "value": "" + }, + "constraint": { + "value": "" + } + }, + "zIndex": 0 + } + ] + }, + "err": "" +}