diff --git a/.gitignore b/.gitignore index 640e0df6ab8edc00252764721d32a2ea5eec016a..41a58c34bc05b2d998edb628740a3f532d49d164 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ /dist /database/views /service +schema.sql diff --git a/package.json b/package.json index 373398c84c0a5c02e70ffaa98e5ca758e4a3d096..7373139ac4a320a33fe2501ff765505e024e75b7 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 86b1507cc4864e35870f6b9d3a6b7dcbbae8ac04..07da0525a2e6aec2e7d1fa3de4aaceedc11beed7 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 43601c67214839c217eae0a2a67270f3136fb22f..c4abac077eff6b79594ef40d19f723f9be037756 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;