Skip to content

Commit 60caf31

Browse files
committed
- Added support projection case;
- configured tslint in project;
1 parent 7075543 commit 60caf31

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+1410
-897
lines changed

docs-commands.ignorenpm

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
##Compile TS:
2+
> tsc
3+
4+
##TSLint:
5+
> tslint -c tslint.json --project "./src" [--fix]
6+
> tslint -c tslint.json "src/**/*.ts" [--fix]
7+
- // tslint:disable-next-line

docs-compile.ignorenpm

-2
This file was deleted.

main.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66

77
// export { DatetimeUtils } from './src/datetime-utils';
88
// export { DatabaseHelper } from "./src/database-helper";
9-
// export { MetadataTable } from './src/metadata-table';
9+
// export { MetadataTable } from './src/metadata-table';

package.json

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "database-builder",
3-
"version": "0.0.4",
3+
"version": "0.0.5",
44
"description": "Framework to assist in database manipulation (DDL and CRUD)",
55
"main": "./src/index.js",
66
"types": "./src/index.d.ts",
@@ -12,6 +12,11 @@
1212
"lambda-expression": "0.1.0"
1313
},
1414
"devDependencies": {
15+
"@types/chai": "^4.1.1",
16+
"@types/mocha": "^2.2.46",
17+
"chai": "^4.1.2",
18+
"mocha": "^5.0.0",
19+
"ts-node": "^4.1.0",
1520
"typescript": "2.6.2"
1621
},
1722
"keywords": [

src/core/builder-compiled.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { ValueType } from "./utils";
2+
3+
export class BuilderCompiled {
4+
5+
constructor(
6+
public builder: string = "",
7+
public params: ValueType[] = []) {
8+
}
9+
}

src/core/column.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { ValueType} from "./utils";
2+
import { FieldType } from "./enums/field-type";
3+
4+
export interface Column {
5+
value: ValueType;
6+
name: string;
7+
type: FieldType;
8+
}

src/core/columns-base-builder.ts

+39-37
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
1-
import { MetadataTable } from './../metadata-table';
2-
import { DatabaseHelper } from './../database-helper';
1+
import { MetadataTable } from "./../metadata-table";
2+
import { DatabaseHelper } from "./../database-helper";
33
import { Expression, ExpressionUtils } from "lambda-expression";
4-
import { FieldType, ColumnsCompiled, ValueTypeToParse, Column } from './utils';
5-
import { MapperTable } from '../mapper-table';
4+
import { ExpressionOrColumn, Utils, ValueTypeToParse } from "./utils";
5+
import { MapperTable } from "../mapper-table";
6+
import { Column } from "./column";
7+
import { FieldType } from "./enums/field-type";
8+
import { ColumnsCompiled } from "./columns-compiled";
69

7-
export abstract class ColumnsBaseBuilder<TThis extends ColumnsBaseBuilder<TThis, T, TColumn>, T, TColumn extends Column>{
10+
export abstract class ColumnsBaseBuilder<
11+
TThis extends ColumnsBaseBuilder<TThis, T, TColumn>,
12+
T,
13+
TColumn extends Column
14+
> {
815

916
protected columns: TColumn[] = [];
10-
protected readonly expressionUtils: ExpressionUtils;
11-
protected readonly databaseHelper: DatabaseHelper;
1217

1318
constructor(
1419
protected readonly metadata: MetadataTable<T>,
15-
protected readonly modelToSave: T = metadata.instance
20+
protected readonly modelToSave: T = metadata.instance,
1621
) {
17-
this.expressionUtils = new ExpressionUtils();
18-
this.databaseHelper = new DatabaseHelper();
1922
}
2023

2124
public allColumns() {
@@ -25,49 +28,48 @@ export abstract class ColumnsBaseBuilder<TThis extends ColumnsBaseBuilder<TThis,
2528
}
2629

2730
public setColumn(column: string, type: FieldType): TThis {
28-
this.columns.push(<TColumn>{
31+
this.columns.push({
2932
name: column,
30-
type: type
31-
});
33+
type,
34+
} as TColumn);
3235
return this.getInstance();
3336
}
3437

35-
public set(expression: Expression<T>): TThis {
38+
public set(expression: ExpressionOrColumn<T>): TThis {
3639
return this.setColumn(
37-
this.expressionUtils.getColumnByExpression(expression),
38-
this.getTypeByExpression(expression)
40+
Utils.getColumn(expression),
41+
Utils.getType(this.metadata.instance, expression),
3942
);
4043
}
4144

4245
public compile(): ColumnsCompiled {
43-
let result: ColumnsCompiled = {
46+
const result: ColumnsCompiled = {
4447
columns: [],
45-
params: []
48+
params: [],
4649
};
47-
this.columns.forEach(column => {
48-
result.columns.push(this.columnFormat(column));
49-
});
50-
return result;
51-
}
52-
53-
private setAllColumns(mapper: MapperTable, modelWithValue: T): void {
54-
for (let key in mapper.columns) {
55-
let column = mapper.columns[key];
56-
this.setColumnValue(column.column, this.databaseHelper.getValue(modelWithValue, column.fieldReference), column.fieldType);
50+
for (const key in this.columns) {
51+
if (this.columns.hasOwnProperty(key)) {
52+
const column = this.columns[key];
53+
result.columns.push(this.columnFormat(column));
54+
}
5755
}
58-
}
59-
60-
protected getTypeByValue(value: ValueTypeToParse): FieldType {
61-
return this.databaseHelper.getType(value);
62-
}
63-
64-
protected getTypeByExpression(expression: Expression<T>): FieldType {
65-
return this.getTypeByValue(this.expressionUtils.getValueByExpression(this.metadata.instance, expression));
56+
return result;
6657
}
6758

6859
protected abstract columnFormat(column: TColumn): string;
6960

7061
protected abstract getInstance(): TThis;
7162

7263
protected abstract setColumnValue(column: string, value: ValueTypeToParse, fieldType: FieldType): TThis;
73-
}
64+
65+
private setAllColumns(mapper: MapperTable, modelWithValue: T): void {
66+
for (const key in mapper.columns) {
67+
if (mapper.columns.hasOwnProperty(key)) {
68+
const column = mapper.columns[key];
69+
this.setColumnValue(column.column,
70+
Utils.getValue(modelWithValue, column.fieldReference),
71+
column.fieldType);
72+
}
73+
}
74+
}
75+
}

src/core/columns-base-compiled.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export interface ColumnsBaseCompiled {
2+
columns: string[];
3+
}

src/core/columns-compiled.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { ValueType } from "./utils";
2+
import { ColumnsBaseCompiled } from "./columns-base-compiled";
3+
4+
export interface ColumnsCompiled extends ColumnsBaseCompiled {
5+
params: ValueType[];
6+
}

src/core/columns-values-builder.ts

+23-18
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,52 @@
1-
import { MetadataTable } from './../metadata-table';
2-
import { ColumnsCompiled, ValueTypeToParse, Column, FieldType } from "./utils";
1+
import { MetadataTable } from "./../metadata-table";
2+
import { ExpressionOrColumn, Utils, ValueTypeToParse } from "./utils";
33
import { Expression } from "lambda-expression";
44
import { ColumnsBaseBuilder } from "./columns-base-builder";
5+
import { Column } from "./column";
6+
import { FieldType } from "./enums/field-type";
7+
import { ColumnsCompiled } from "./columns-compiled";
58

6-
export abstract class ColumnsValuesBuilder<T, TThis extends ColumnsValuesBuilder<T, TThis>> extends ColumnsBaseBuilder<TThis, T, Column>{
9+
export abstract class ColumnsValuesBuilder<
10+
T, TThis extends ColumnsValuesBuilder<T, TThis>>
11+
extends ColumnsBaseBuilder<TThis, T, Column> {
712

813
constructor(
914
metadata: MetadataTable<T>,
10-
modelToSave: T = void 0
15+
modelToSave: T = void 0,
1116
) {
1217
super(metadata, modelToSave);
13-
}
18+
}
1419

1520
public setColumnValue(column: string, value: ValueTypeToParse, fieldType: FieldType): TThis {
1621
this.columns.push({
1722
name: column,
18-
value: this.databaseHelper.parseToValueType(value, fieldType),
19-
type: fieldType
23+
type: fieldType,
24+
value: Utils.getValueType(value, fieldType),
2025
});
2126
return this.getInstance();
2227
}
2328

24-
public setValue(expression: Expression<T>, value: ValueTypeToParse): TThis {
29+
public setValue(expression: ExpressionOrColumn<T>, value: ValueTypeToParse): TThis {
2530
return this.setColumnValue(
26-
this.expressionUtils.getColumnByExpression(expression),
31+
Utils.getColumn(expression),
2732
value,
28-
this.databaseHelper.getType(value)
33+
Utils.getType(value),
2934
);
3035
}
3136

32-
public set(expression: Expression<T>): TThis {
37+
public set(expression: ExpressionOrColumn<T>): TThis {
3338
return this.setValue(
3439
expression,
35-
this.getValueByExpression(expression)
40+
this.getValueByExpression(expression),
3641
);
3742
}
3843

3944
public compile(): ColumnsCompiled {
40-
let result: ColumnsCompiled = {
45+
const result: ColumnsCompiled = {
4146
columns: [],
42-
params: []
47+
params: [],
4348
};
44-
this.columns.forEach(column => {
49+
this.columns.forEach((column) => {
4550
result.columns.push(this.columnFormat(column));
4651
result.params.push(column.value);
4752
});
@@ -50,7 +55,7 @@ export abstract class ColumnsValuesBuilder<T, TThis extends ColumnsValuesBuilder
5055

5156
protected abstract columnFormat(column: Column): string;
5257

53-
private getValueByExpression(expression: Expression<T>) {
54-
return this.expressionUtils.getValueByExpression(this.modelToSave, expression);
58+
private getValueByExpression(expression: ExpressionOrColumn<T>) {
59+
return Utils.getValue(this.modelToSave, expression);
5560
}
56-
}
61+
}

src/core/crud-compiled.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { ValueType } from "./utils";
2+
3+
export interface CrudCompiled {
4+
sql: string;
5+
params: ValueType[];
6+
}

src/core/crud-insert-compiled.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface CrudInsertCompiled {
2+
columns: string;
3+
values: string;
4+
}

src/core/enums/column-type.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export enum ColumnType {
2+
TEXT = "TEXT",
3+
INTEGER = "INTEGER",
4+
BOOLEAN = "BOOLEAN",
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum ExpressionOrColumnEnum {
2+
Expression,
3+
Column,
4+
}

src/core/enums/field-type.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export enum FieldType {
2+
STRING,
3+
NUMBER,
4+
BOOLEAN,
5+
DATE,
6+
OBJECT,
7+
FUNCTION,
8+
}

src/core/enums/order-by.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum OrderBy {
2+
ASC = "ASC",
3+
DESC = "DESC",
4+
}

src/core/executable-builder.ts

+15-13
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,48 @@
1-
import { Database, DatabaseObject, DatabaseTransaction } from './../definitions/database-definition';
2-
import { ResultExecuteSql, QueryCompiled } from "./utils";
1+
import { Database, DatabaseObject, DatabaseTransaction } from "./../definitions/database-definition";
2+
import { QueryCompiled } from "./query-compiled";
3+
import { ResultExecuteSql } from "./result-execute-sql";
34

45
export class ExecutableBuilder {
56

6-
constructor(public enableLog: boolean = true){
7+
constructor(public enableLog: boolean = true) {
78

89
}
910

1011
public execute(
1112
compiled: QueryCompiled,
12-
database: Database
13+
database: Database,
1314
): Promise<ResultExecuteSql> {
1415
this.log(compiled);
1516
return this.executeSql(database, compiled);
1617
}
1718

1819
private executeSql(
19-
database: Database, compiled: QueryCompiled
20+
database: Database, compiled: QueryCompiled,
2021
): Promise<ResultExecuteSql> {
21-
if ((<DatabaseObject>database).addTransaction) {
22-
// if (database instanceof SQLiteObject) {
23-
return (<DatabaseObject>database).executeSql(
22+
if ((database as DatabaseObject).addTransaction) {
23+
return (database as DatabaseObject).executeSql(
2424
compiled.query,
25-
compiled.params
25+
compiled.params,
2626
);
2727
}
2828
return new Promise<any>((resolve, reject) => {
29-
(<DatabaseTransaction>database).executeSql(
29+
(database as DatabaseTransaction).executeSql(
3030
compiled.query,
3131
compiled.params,
3232
(tx: DatabaseTransaction, result: ResultExecuteSql) => {
3333
resolve(result);
3434
},
3535
(tx: DatabaseTransaction, error: any) => {
3636
reject(error);
37-
}
37+
},
3838
);
3939
});
4040
}
4141

4242
private log(log: any) {
43-
if (this.enableLog)
43+
if (this.enableLog) {
44+
// tslint:disable-next-line
4445
console.log(log);
46+
}
4547
}
46-
}
48+
}

src/core/index.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
2-
export { ResultExecuteSql, QueryCompiled } from "./utils";
3-
export { ExecutableBuilder } from './executable-builder';
1+
export { ResultExecuteSql } from "./result-execute-sql";
2+
export { QueryCompiled } from "./query-compiled";
3+
export { ExecutableBuilder } from "./executable-builder";

src/core/query-compilable.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { ValueType } from "./utils";
2+
3+
export interface QueryCompilable {
4+
compile(): { query: string, params: ValueType[] };
5+
}

src/core/query-compiled.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { ValueType } from "./utils";
2+
3+
export interface QueryCompiled {
4+
query: string;
5+
params: ValueType[];
6+
}

src/core/result-execute-sql.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { RowsResultExecuteSql } from "./rows-result-execute-sql";
2+
3+
export interface ResultExecuteSql {
4+
rows: RowsResultExecuteSql;
5+
rowsAffected: number;
6+
insertId: number;
7+
}

src/core/rows-result-execute-sql.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface RowsResultExecuteSql {
2+
length: number;
3+
item(key: number): any;
4+
}

0 commit comments

Comments
 (0)