d2oracle: delete class and table deletes all refs

This commit is contained in:
Alexander Wang 2023-03-09 17:03:31 -08:00
parent 6670e1967c
commit 1730326747
No known key found for this signature in database
GPG key ID: D89FA31966BDBECE
7 changed files with 378 additions and 35 deletions

View file

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

View file

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

View file

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

38
testdata/d2oracle/TestDelete/class_refs.exp.json generated vendored Normal file
View file

@ -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": "<nil>"
}

View file

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

View file

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

269
testdata/d2oracle/TestDelete/table_refs.exp.json generated vendored Normal file
View file

@ -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": "<nil>"
}