Merge pull request 'responses' (#8) from dev into main
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful

Reviewed-on: #8
This commit is contained in:
jusax23 2023-02-22 11:17:24 +01:00
commit 24cdcd5c39
5 changed files with 65 additions and 13 deletions

View file

@ -4,6 +4,7 @@ import { Handler } from './defaultHandler';
import { Query } from './query';
import { attributeSettings, extendedAttributeSettings, onAction, dbType } from './types';
import { TableAlias } from "./alias"
import { insertResponse, readResponse, writeResponse } from "./responses"
//import { postgresHandler } from "./postgresHandler"
@ -28,8 +29,8 @@ export class DB {
this.name = database;
}
async query(query: Query) {
console.log(query);
async query(query: Query, printQuery = false) {
if(printQuery)console.log(query);
if (this.type == dbType.mariadb) return await this.mariaPool.query(query);
/*else if (this.type == dbType.postgres) {
let res = await this.pgPool.query(query.sql, query.values);
@ -162,4 +163,5 @@ export class Table {
export * from './funcs';
export { onAction };
export { dbType as databaseType }
export { dbType as databaseType }
export { readResponse, writeResponse, insertResponse }

View file

@ -1,5 +1,5 @@
import { AttributeAlias, TableAlias } from "./alias";
import { Attribute, DB, Table } from "./db"
import { Attribute, DB, insertResponse, readResponse, Table, writeResponse } from "./db"
import { Aggregation, checkConstraint, joinCross, Datatype, foreignConstraint, Modifier, joinNatural, onJoin, uniqueConstraint, usingJoin } from "./dbStructure"
import { insertQuery, Query, QueryBuilder, removeQuery, selectQuery, updateQuery } from "./query"
import { allModifierInput, joinType, onAction, primaryData } from "./types"
@ -570,6 +570,12 @@ export class Handler {
},
}
responses = {
readResponse: (resp: any) => new readResponse(resp),
writeResponse: (resp: any) => new writeResponse(resp.affectedRows),
insertResponse: (resp: any) => new insertResponse(resp.affectedRows, resp.insertId),
}
aggregations = {
count: (handler: Handler, a: Attribute): QueryBuilder => new QueryBuilder([{ data: "count(" + a.toString(handler) + ")" }]),
sum: (handler: Handler, a: Attribute): QueryBuilder => new QueryBuilder([{ data: "sum(" + a.toString(handler) + ")" }]),
@ -708,6 +714,23 @@ export class Handler {
}
return builder;
},
regexp: (handler: Handler, a: allModifierInput[]): QueryBuilder => {
const builder = new QueryBuilder();
if (a[0] instanceof Attribute || a[0] instanceof AttributeAlias) builder.addCode(a[0].toString());
else if (a[0] instanceof Modifier || a[0] instanceof selectQuery || a[0] instanceof Aggregation) {
builder.append(a[0].serialize(handler));
} else {
builder.addInjection(a[0]);
}
builder.addCode(" REGEXP ");
if (a[1] instanceof Attribute || a[1] instanceof AttributeAlias) builder.addCode(a[1].toString());
else if (a[1] instanceof Modifier || a[1] instanceof selectQuery || a[1] instanceof Aggregation) {
builder.append(a[1].serialize(handler));
} else {
builder.addInjection(a[1]);
}
return builder;
},
concat: (handler: Handler, a: allModifierInput[]): QueryBuilder => {
const builder = new QueryBuilder();
builder.addCode("CONCAT(");

View file

@ -18,6 +18,7 @@ export const divide = (...args: allModifierInput[]) => new NumberModifier("divid
export const not = (arg: allModifierInput) => new BooleanModifier("not", [arg]);
export const like = (a: allModifierInput, b: allModifierInput) => new BooleanModifier("like", [a, b]);
export const regexp = (a: allModifierInput, b: allModifierInput) => new BooleanModifier("regexp", [a, b]);
export const concat = (...args: allModifierInput[]) => new StringModifier("concat", args);

View file

@ -49,7 +49,7 @@ export class QueryBuilder {
this.list.push(...qb.list);
}
appendEnding(qb: QueryBuilder) {
if(qb.isEmpty()) return;
if (qb.isEmpty()) return;
this.append(qb);
this.list.push([false, ";"]);
}
@ -96,11 +96,12 @@ export class selectQuery {
return handler.querys.select(handler, this);
}
async query(db: DB) {
async query(db: DB, printQuery = false) {
const handler = db.getHandler();
const builder = this.serialize(handler);
const s = handler.builders.query(builder);
return await db.query(s);
let readResp = await db.query(s, printQuery);
return db.getHandler().responses.readResponse(readResp);
}
}
@ -133,11 +134,12 @@ export class insertQuery {
serialize(handler: Handler): QueryBuilder {
return handler.querys.insert(handler, this);
}
async query(db: DB) {
async query(db: DB, printQuery = false) {
const handler = db.getHandler();
const builder = this.serialize(handler);
const s = handler.builders.query(builder);
return await db.query(s);
let readResp = await db.query(s, printQuery);
return db.getHandler().responses.insertResponse(readResp);
}
}
@ -161,11 +163,12 @@ export class updateQuery {
serialize(handler: Handler): QueryBuilder {
return handler.querys.update(handler, this);
}
async query(db: DB) {
async query(db: DB, printQuery = false) {
const handler = db.getHandler();
const builder = this.serialize(handler);
const s = handler.builders.query(builder);
return await db.query(s);
let readResp = await db.query(s, printQuery);
return db.getHandler().responses.writeResponse(readResp);
}
}
@ -182,10 +185,11 @@ export class removeQuery {
serialize(handler: Handler): QueryBuilder {
return handler.querys.remove(handler, this);
}
async query(db: DB) {
async query(db: DB, printQuery = false) {
const handler = db.getHandler();
const builder = this.serialize(handler);
const s = handler.builders.query(builder);
return await db.query(s);
let readResp = await db.query(s, printQuery);
return db.getHandler().responses.writeResponse(readResp);
}
}

22
src/responses.ts Normal file
View file

@ -0,0 +1,22 @@
export class readResponse extends Array{
constructor(rows:({[key: string]:any})[]){
super();
this.push(...rows);
}
}
export class writeResponse{
affectedRows: number;
constructor(affectedRows: number){
this.affectedRows = affectedRows;
}
}
export class insertResponse extends writeResponse{
insertId: number;
constructor(affectedRows: number, insertId: number){
super(affectedRows);
this.insertId = insertId;
}
}