From 4dd84cadd2a29496be31bf5a2a6cbc7b22a18779 Mon Sep 17 00:00:00 2001
From: Lucas Fernandes de Oliveira <lfo14@inf.ufpr.br>
Date: Wed, 7 Feb 2018 11:10:17 -0200
Subject: [PATCH] Issue#59: Fix createSchema.ts and add npm run schema

Signed-off-by: Lucas Fernandes de Oliveira <lfo14@inf.ufpr.br>
---
 .gitignore                                    |  1 +
 package.json                                  |  2 +-
 database/createSchema.ts => scripts/schema.ts | 39 +++++++++++++++++--
 src/util/configParser.ts                      |  7 +++-
 4 files changed, 42 insertions(+), 7 deletions(-)
 rename database/createSchema.ts => scripts/schema.ts (67%)

diff --git a/.gitignore b/.gitignore
index 640e0df6..41a58c34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@
 /dist
 /database/views
 /service
+schema.sql
diff --git a/package.json b/package.json
index 373398c8..7373139a 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
     "test": "env $(cat config/test.env) ts-node node_modules/istanbul/lib/cli.js cover -x \"**/*.spec.ts\" -e .ts _mocha",
     "show-coverage": "xdg-open coverage/lcov-report/index.html",
     "doc-api": "raml2html -i specs/blendb-api-v1.raml -o doc/api-v1-reference.html",
-    "database": "ts-node database/config.ts database",
+    "schema": "env $(cat config/config.env ) ts-node scripts/schema.ts config/config.yaml schema.sql",
     "service": "./scripts/service.sh"
   },
   "repository": {
diff --git a/database/createSchema.ts b/scripts/schema.ts
similarity index 67%
rename from database/createSchema.ts
rename to scripts/schema.ts
index 86b1507c..07da0525 100755
--- a/database/createSchema.ts
+++ b/scripts/schema.ts
@@ -52,8 +52,20 @@ for (let i = 0; i < config.buildViews.length; ++i) {
     if (view.origin) {
         // Cria uma tabela
         let output = "-- View: " + alias + "\n";
-        output += "DROP VIEW IF EXISTS view_" + view.id + " CASCADE;\n";
-        output += "CREATE OR REPLACE VIEW view_" +  view.id + " AS\n";
+        if (process.env.BLENDB_ADAPTER  === "postgres") {
+            output += "DROP VIEW IF EXISTS view_" + view.id + " CASCADE;\n";
+            output += "CREATE OR REPLACE VIEW view_" +  view.id + " AS\n";
+        }
+
+        else if (process.env.BLENDB_ADAPTER  === "monet") {
+            output += "DROP VIEW view_" + view.id + " CASCADE;\n";
+            output += "CREATE VIEW view_" +  view.id + " AS\n";
+        }
+
+        else {
+            console.log("The adapter value:", process.env.BLENDB_ADAPTER, "is invalid. Abort");
+            process.exit(1);
+        }
         output += fs.readFileSync(referencePath + "/" + filePath, {encoding: "utf-8" });
         schema += output + "\n";
         engine.addView(view);
@@ -72,10 +84,25 @@ for (let i = 0; i < config.buildViews.length; ++i) {
         });
 
         const table = adapter.getQueryFromView(materializedView);
-        const query = "-- View: " + alias + "\n" +
-                      "DROP MATERIALIZED VIEW IF EXISTS view_" + view.id + " CASCADE;\n" +
+        let query = "-- View: " + alias + "\n";
+        if (process.env.BLENDB_ADAPTER  === "postgres") {
+            query += "DROP MATERIALIZED VIEW IF EXISTS view_" + view.id + " CASCADE;\n" +
                       "CREATE MATERIALIZED VIEW view_" + materializedView.id +
                       " AS "  + table + "\n\n";
+        }
+
+        else if (process.env.BLENDB_ADAPTER  === "monet") {
+            console.log("MonetDb does not support Materializaed views. Abort");
+            console.log("All views in config.yaml must be origin form MonetDB");
+            console.log("This is a known issue.");
+            console.log("In the future this script will create a table and copy the data.");
+            process.exit(1);
+        }
+
+        else {
+            console.log("The adapter value:", process.env.BLENDB_ADAPTER, "is invalid. Abort");
+            process.exit(1);
+        }
 
         schema += query;
         engine.addView(materializedView);
@@ -88,4 +115,8 @@ fs.writeFile(schemaFile, schema, (error) => {
         process.exitCode = 1;
         return;
     }
+
+    else {
+        console.log("File: " + schemaFile + " created");
+    }
 });
diff --git a/src/util/configParser.ts b/src/util/configParser.ts
index 43601c67..c4abac07 100644
--- a/src/util/configParser.ts
+++ b/src/util/configParser.ts
@@ -96,9 +96,12 @@ export class ConfigParser {
             port: parseInt(process.env.BLENDB_DB_PORT, 10)
         };
 
+        const strCreate = process.env.BLENDB_ST_CREATE;
+        const strInsert = process.env.BLENDB_ST_INSERT;
+
         let struct: LoadStruct = {
-            create: process.env.BLENDB_ST_CREATE.toLowerCase() === "true",
-            insert: process.env.BLENDB_ST_INSERT.toLowerCase() === "true"
+            create: (strCreate) ? strCreate.toLowerCase() === "true" : false,
+            insert: (strInsert) ? strInsert.toLowerCase() === "true" : false
         };
 
         let metricsOpts = config.metrics;
-- 
GitLab