From ea43eb9bfb4acbc9aa882a3ca3b44a506e3330ed Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Fri, 24 Dec 2021 14:58:17 +0530 Subject: Fetch entire table schema in single SPARQL query. * visualize-schema.scm (tables): Fetch entire table schema in single SPARQL query. --- visualize-schema.scm | 40 +++++++++++++++++----------------------- 1 file 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 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: +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 . - ?table ~s . - ?field . - ?table ?field . - ?field ?fieldname . - ?field ?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 -- cgit v1.2.3