From 005ed66f7e5fbfd7742828023bbd364938aadff7 Mon Sep 17 00:00:00 2001 From: Rafael <rpd17@inf.ufpr.br> Date: Mon, 23 Apr 2018 10:24:16 -0300 Subject: [PATCH] Issue #62: Add insert Signed-off-by: Rafael <rpd17@inf.ufpr.br> --- config/ci_test.yaml.example | 81 +++++++++++++++++++---------- src/adapter/monet.ts | 4 ++ src/api/controllers/collect.spec.ts | 50 +++++++++--------- src/api/controllers/collect.ts | 10 +--- 4 files changed, 84 insertions(+), 61 deletions(-) diff --git a/config/ci_test.yaml.example b/config/ci_test.yaml.example index 30192280..7426a615 100644 --- a/config/ci_test.yaml.example +++ b/config/ci_test.yaml.example @@ -213,69 +213,94 @@ dimensions: description: "A dimension of Blendb. Has 1 possible value." enumTypes: - - name: "enum type:0" + name: "enum_type_0" values: - - "test:0" - - "test:1" - - "test:2" - - "test:3" + - "male" + - "female" + - "binary" + - "undecided" - - name: "enum type:1" + name: "enum_type_1" values: - - "test:4" - - "test:5" - - "test:6" + - "test_4" + - "test_5" + - "test_6" + - "string" - - name: "enum type:2" + name: "enum_type_2" values: - - "test:7" - - "test:8" + - "test_7" + - "test_8" - - name: "enum type:3" + name: "enum_type_3" values: - - "test:9" + - "test_9" sources: - - name: "source:0" + name: "source_0" description: "source with 3 entries" fields: - - name: "fields:0" + name: "fields_0" description: "first entry" dataType: "string" - - name: "fields:1" + name: "fields_1" description: "second entry" dataType: "string" - - name: "fields:2" + name: "fields_2" description: "third entry" dataType: "string" - - name: "source:1" + name: "source_1" description: "source with 2 entries" fields: - - name: "fields:0" + name: "fields_0" description: "first entry" - dataType: "string" + dataType: "enum_type_0" - - name: "fields:1" + name: "fields_1" description: "second entry" dataType: "string" - - name: "source:2" - description: "source with one entry" + name: "source_2" + description: "source with one entry and undefined dataType" fields: - - name: "fields:0" + name: "fields_0" description: "first entry" - dataType: "string" + dataType: "notValid" - - name: "source:3" + name: "source_3" description: "source with one entry and without description" fields: - - name: "fields:3" + name: "fields_0" + dataType: "string" + - + name: "source_4" + description: "source with all core types from blendb" + fields: + - + name: "fields_0" + description: "first entry" + dataType: "integer" + - + name: "fields_1" + description: "second entry" + dataType: "float" + - + name: "fields_2" + description: "third entry" dataType: "string" + - + name: "fields_3" + description: "fourth entry" + dataType: "boolean" + - + name: "fields_4" + description: "fifth entry" + dataType: "date" diff --git a/src/adapter/monet.ts b/src/adapter/monet.ts index 3d38f578..321a3872 100644 --- a/src/adapter/monet.ts +++ b/src/adapter/monet.ts @@ -46,7 +46,10 @@ export class MonetAdapter extends SQLAdapter { } public getDataFromView(view: View, cb: (error: Error, result?: any[]) => void): void { const query = this.getQueryFromView(view); + this.executeQuery(query, cb); + } + private executeQuery(query: string, cb: (error: Error, result?: any[]) => void): void { let pool: any = new MDB(this.config); pool.connect(); pool.query(query).then((result: MonetResult) => { @@ -81,6 +84,7 @@ export class MonetAdapter extends SQLAdapter { public insertIntoSource(source: Source, data: any[], cb: (err: Error, result: any[]) => void): void { const query = this.getQueryFromSource(source, data); + this.executeQuery(query, cb); } protected typeCast(quotedValue: string, dt: string): string { diff --git a/src/api/controllers/collect.spec.ts b/src/api/controllers/collect.spec.ts index 10d0fb5a..dfa07840 100644 --- a/src/api/controllers/collect.spec.ts +++ b/src/api/controllers/collect.spec.ts @@ -27,17 +27,7 @@ import { Fixture as FixPostgres } from "../../../test/postgres/fixture"; import { Fixture as FixMonet } from "../../../test/monet/fixture"; import { MonetAdapter, MonetConfig } from "../../adapter/monet"; import { PostgresAdapter } from "../../adapter/postgres"; -import { Source } from "../../core/source"; -// criar de certa forma tabela e depois excluir apos o teste...??? -// comando direto no bd -// extrair as outras informações que estão contida no err - -// Criar função que acessa o banco e executa as duas query que voce -// CREATE TABLE source_0 (fields_0 text,fields_1 text, fields_2 text); -// DROP TABLE source_0; -// CREATE TABLE source_1 (fields_0 text,fields_1 text); -// DROP TABLE source_1; describe("API collect controller", () => { // Initializing let config: any; @@ -55,6 +45,26 @@ describe("API collect controller", () => { done(); }); } + else if (config.adapter === "monet") { + fixture = new FixMonet(config.connection); + fixture.load(config.loadViews, config.struct.create, (err) => { + if (err) { + throw err; + } + let parsedConfig: MonetConfig = { + user: config.connection.user, + dbname: config.connection.database, + password: config.connection.password, + host: config.connection.host, + port: config.connection.port + }; + adapter = new MonetAdapter(parsedConfig); + done(); + }); + } + else { + this.skip(); + } }); it("should respond 500 since the req.params.class does not exist on Sources", (done) => { request(server) @@ -148,7 +158,7 @@ describe("API collect controller", () => { const message = "Query execution failed: " + "Could not construct query with the paramters given."; - const error = "The element 'nope' isn't a type integer"; + const error = "The value 'nope' isn't a type integer"; expect(res.body).to.be.an("object"); expect(res.body).to.have.property("message"); expect(res.body.message).to.be.eql(message); @@ -167,7 +177,7 @@ describe("API collect controller", () => { const message = "Query execution failed: " + "Could not construct query with the paramters given."; - const error = "The element 'notafloat' isn't a type float"; + const error = "The value 'notafloat' isn't a type float"; expect(res.body).to.be.an("object"); expect(res.body).to.have.property("message"); expect(res.body.message).to.be.eql(message); @@ -186,7 +196,7 @@ describe("API collect controller", () => { const message = "Query execution failed: " + "Could not construct query with the paramters given."; - const error = "The element '1' isn't a type string"; + const error = "The value '1' isn't a type string"; expect(res.body).to.be.an("object"); expect(res.body).to.have.property("message"); expect(res.body.message).to.be.eql(message); @@ -205,7 +215,7 @@ describe("API collect controller", () => { const message = "Query execution failed: " + "Could not construct query with the paramters given."; - const error = "The element 'notaboolean' isn't a type boolean"; + const error = "The value 'notaboolean' isn't a type boolean"; expect(res.body).to.be.an("object"); expect(res.body).to.have.property("message"); expect(res.body.message).to.be.eql(message); @@ -224,7 +234,7 @@ describe("API collect controller", () => { const message = "Query execution failed: " + "Could not construct query with the paramters given."; - const error = "The element '1999-25-25' isn't a type date"; + const error = "The value '1999-25-25' isn't a type date"; expect(res.body).to.be.an("object"); expect(res.body).to.have.property("message"); expect(res.body.message).to.be.eql(message); @@ -266,14 +276,4 @@ describe("API collect controller", () => { }) .end(done); }); - // it("should respond 500 since source_9999 does not exist on postgres", (done) => { - // let source: Source; - // source = "['name': 'source_9999','description':'nothing herer ', 'fields' : [{'name' : 'field_0', 'description':'nothing here', 'dataType' : 'string'}]]"; - // let query: any = "[{'fields_0': 'batata }]"; - // adapter.insertIntoSource(null, query, (err, result) => { - // - // }); - // - // done(); - // }); }); diff --git a/src/api/controllers/collect.ts b/src/api/controllers/collect.ts index 4f3847ad..41f5c640 100644 --- a/src/api/controllers/collect.ts +++ b/src/api/controllers/collect.ts @@ -40,7 +40,6 @@ export class CollectCtrl { else { return true; } - }, "float": function(value: any) { let float = parseFloat(value); @@ -51,7 +50,6 @@ export class CollectCtrl { else { return true; } - }, "string": function(value: any) { let str: string = typeof(value); @@ -62,7 +60,6 @@ export class CollectCtrl { else{ return false; } - }, "date": function(value: any) { let test = Date.parse(value); @@ -73,7 +70,6 @@ export class CollectCtrl { else { return true; } - }, "boolean": function(value: any) { let bool = typeof(value); @@ -84,9 +80,7 @@ export class CollectCtrl { else{ return false; } - } - // preciso de um valor para quando o elemento não for encontrado }; let fields: string[] = []; @@ -99,7 +93,7 @@ export class CollectCtrl { const id: string = req.params.class; try { source = req.engine.getSourceByName(id); - // If source does not exist them return throw error + // If source does not exist them return error fields = source.fields.map((item) => item.name); @@ -117,7 +111,7 @@ export class CollectCtrl { if (Validador[dataType[i]] !== undefined){ if (!Validador[dataType[i]](data[i]) === true){ throw new Error( - "The element '" + data[i] + + "The value '" + data[i] + "' isn't a type " + dataType[i]); } -- GitLab