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