diff options
author | Arun Isaac | 2021-12-24 14:58:17 +0530 |
---|---|---|
committer | Arun Isaac | 2021-12-24 14:58:17 +0530 |
commit | ea43eb9bfb4acbc9aa882a3ca3b44a506e3330ed (patch) | |
tree | 776b0c7cbaf71b10480cc74b795026aeb9a2bbec | |
parent | a2cd075131597e9150897ccd46c07a2c924c519f (diff) | |
download | gn-transform-databases-ea43eb9bfb4acbc9aa882a3ca3b44a506e3330ed.tar.gz |
Fetch entire table schema in single SPARQL query.
* visualize-schema.scm (tables): Fetch entire table schema in single
SPARQL query.
-rw-r--r-- | visualize-schema.scm | 40 |
1 files changed, 17 insertions, 23 deletions
diff --git a/visualize-schema.scm b/visualize-schema.scm index af86477..8fa27a6 100644 --- a/visualize-schema.scm +++ b/visualize-schema.scm @@ -118,33 +118,27 @@ return #f. ALL-TABLES is a list of all tables in the database." "Return list of all tables in DB. Each element of the returned list is a <table> object." (map (match-lambda - ((table size) + ((table size fields field-types field-dumped) (make-table table - ;; FIXME: Why is size coming out as a string? (string->number size) - (map (match-lambda - ((field type) (make-column field type))) - (sparql-query-records - ;; We use format to construct the query instead of - ;; select due to an outstanding bug in - ;; guile-sparql. See - ;; https://github.com/roelj/guile-sparql/issues/5 - (format - "SELECT ?fieldname ?fieldtype + (map make-column + (string-split fields #\,) + (string-split field-types #\,) + (map (cut string=? <> "1") + (string-split field-dumped #\,)))))) + (sparql-query-records + "PREFIX gn: <http://genenetwork.org/> +SELECT SAMPLE(?tablename) SAMPLE(?size) GROUP_CONCAT(?fieldname ; separator=\",\") GROUP_CONCAT(?fieldtype ; separator=\",\") GROUP_CONCAT(EXISTS{ ?dump rdf:type gn:dump . ?dump gn:dependsOn ?field .} ; separator=\",\") WHERE { - ?table <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://genenetwork.org/sqlTable> . - ?table <http://genenetwork.org/name> ~s . - ?field <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://genenetwork.org/sqlTableField> . - ?table <http://genenetwork.org/hasField> ?field . - ?field <http://genenetwork.org/name> ?fieldname . - ?field <http://genenetwork.org/sqlFieldType> ?fieldtype . -}" table)))))) - (sparql-query-records - (select '(tablename size) - `((table ,(rdf "type") ,(gn "sqlTable")) - (table ,(gn "name") tablename) - (table ,(gn "hasSize") size)))))) + ?table rdf:type gn:sqlTable ; + gn:name ?tablename ; + gn:hasSize ?size ; + gn:hasField ?field . + ?field rdf:type gn:sqlTableField ; + gn:name ?fieldname ; + gn:sqlFieldType ?fieldtype . +} GROUP BY ?table"))) (define (foreign-key-graphviz-edges tables) "Return the list of graphviz edges representing foreign key |