import { RDSDataService, } from "aws-sdk"; import { QueryBuilderBaseParamEnum } from "../enums"; import { LeQuerybuilderAuroraMysqlDataApiError, LeQuerybuilderAuroraMysqlDataApiErrorEnum } from "../error"; import { QueryBuilderConfField } from "../interfaces"; import { FieldTypeToParamEnumFunc } from "../types"; import { classLikeFormation } from "../utils"; import { getParameterField } from "./aurora-data-api-query-builder-common"; import { formatJoinableTables, JoinableTable, table } from "./join-query"; export interface QBInsertBuilder { fields: QueryBuilderConfField[]; tables: JoinableTable[]; } export function ibNew(): QBInsertBuilder { return { fields: [], tables: [], }; } export function ibFormation any; }>(obj: T, classConf: QBInsertBuilder) { return classLikeFormation(obj, classConf); } export function ibFormat(confobj: QBInsertBuilder): { parameters: RDSDataService.SqlParameter[]; sql: string; } { if (confobj.tables.length === 0) { throw new LeQuerybuilderAuroraMysqlDataApiError(LeQuerybuilderAuroraMysqlDataApiErrorEnum.FormatError); } if (confobj.fields.length === 0) { throw new LeQuerybuilderAuroraMysqlDataApiError(LeQuerybuilderAuroraMysqlDataApiErrorEnum.FormatError); } const parameters: RDSDataService.SqlParameter[] = []; const fieldArr = []; const valueArr = []; let paramCounter = 0; for (const field of confobj.fields) { if (typeof field.raw !== "undefined") { fieldArr.push(field.name); valueArr.push(field.val); continue; } const paramType = field.type; const val = getParameterField(paramType, field.val); const paramName = `p${paramCounter++}`; fieldArr.push(field.name); valueArr.push(`:${paramName}`); parameters.push({ name: paramName, value: val, }); } const tablePart = formatJoinableTables(confobj); return { parameters, sql: `INSERT INTO ${tablePart.str} (${fieldArr.join(",")}) VALUES (${valueArr.join(",")});`, }; }