removePhysically
This commit is contained in:
parent
0672a6413e
commit
9a4f53bca4
|
|
@ -625,6 +625,20 @@ var MySqlTranslator = /** @class */ (function (_super) {
|
||||||
MySqlTranslator.prototype.populateRemoveStmt = function (removeText, fromText, aliasDict, filterText, sorterText, indexFrom, count, option) {
|
MySqlTranslator.prototype.populateRemoveStmt = function (removeText, fromText, aliasDict, filterText, sorterText, indexFrom, count, option) {
|
||||||
// todo using index
|
// todo using index
|
||||||
var alias = aliasDict['./'];
|
var alias = aliasDict['./'];
|
||||||
|
if (option === null || option === void 0 ? void 0 : option.deletePhysically) {
|
||||||
|
var sql_1 = "delete from ".concat(fromText, " ");
|
||||||
|
if (filterText) {
|
||||||
|
sql_1 += " where ".concat(filterText);
|
||||||
|
}
|
||||||
|
if (sorterText) {
|
||||||
|
sql_1 += " order by ".concat(sorterText);
|
||||||
|
}
|
||||||
|
if (typeof indexFrom === 'number') {
|
||||||
|
(0, assert_1.default)(typeof count === 'number');
|
||||||
|
sql_1 += " limit ".concat(indexFrom, ", ").concat(count);
|
||||||
|
}
|
||||||
|
return sql_1;
|
||||||
|
}
|
||||||
var now = Date.now();
|
var now = Date.now();
|
||||||
var sql = "update ".concat(fromText, " set `").concat(alias, "`.`$$deleteAt$$` = '").concat(now, "'");
|
var sql = "update ".concat(fromText, " set `").concat(alias, "`.`$$deleteAt$$` = '").concat(now, "'");
|
||||||
if (filterText) {
|
if (filterText) {
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ export declare abstract class SqlTranslator<ED extends EntityDict> {
|
||||||
private translateProjection;
|
private translateProjection;
|
||||||
private translateSelectInner;
|
private translateSelectInner;
|
||||||
translateSelect<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], option?: OP): string;
|
translateSelect<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], option?: OP): string;
|
||||||
|
translateWhere<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], option?: OP): string;
|
||||||
translateAggregate<T extends keyof ED, OP extends SqlSelectOption>(entity: T, aggregation: ED[T]['Aggregation'], option?: OP): string;
|
translateAggregate<T extends keyof ED, OP extends SqlSelectOption>(entity: T, aggregation: ED[T]['Aggregation'], option?: OP): string;
|
||||||
translateCount<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: Pick<ED[T]['Selection'], 'filter' | 'count'>, option?: OP): string;
|
translateCount<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: Pick<ED[T]['Selection'], 'filter' | 'count'>, option?: OP): string;
|
||||||
translateRemove<T extends keyof ED, OP extends SqlOperateOption>(entity: T, operation: ED[T]['Remove'], option?: OP): string;
|
translateRemove<T extends keyof ED, OP extends SqlOperateOption>(entity: T, operation: ED[T]['Remove'], option?: OP): string;
|
||||||
|
|
|
||||||
|
|
@ -776,12 +776,17 @@ var SqlTranslator = /** @class */ (function () {
|
||||||
return {
|
return {
|
||||||
stmt: this.populateSelectStmt(projText, fromText, aliasDict, filterText, sorterText, undefined, indexFrom, count, option, selection),
|
stmt: this.populateSelectStmt(projText, fromText, aliasDict, filterText, sorterText, undefined, indexFrom, count, option, selection),
|
||||||
currentNumber: currentNumber2,
|
currentNumber: currentNumber2,
|
||||||
|
filterStmt: filterText,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
SqlTranslator.prototype.translateSelect = function (entity, selection, option) {
|
SqlTranslator.prototype.translateSelect = function (entity, selection, option) {
|
||||||
var stmt = this.translateSelectInner(entity, selection, 1, {}, option).stmt;
|
var stmt = this.translateSelectInner(entity, selection, 1, {}, option).stmt;
|
||||||
return stmt;
|
return stmt;
|
||||||
};
|
};
|
||||||
|
SqlTranslator.prototype.translateWhere = function (entity, selection, option) {
|
||||||
|
var filterStmt = this.translateSelectInner(entity, selection, 1, {}, option).filterStmt;
|
||||||
|
return filterStmt;
|
||||||
|
};
|
||||||
SqlTranslator.prototype.translateAggregate = function (entity, aggregation, option) {
|
SqlTranslator.prototype.translateAggregate = function (entity, aggregation, option) {
|
||||||
var data = aggregation.data, filter = aggregation.filter, sorter = aggregation.sorter, indexFrom = aggregation.indexFrom, count = aggregation.count;
|
var data = aggregation.data, filter = aggregation.filter, sorter = aggregation.sorter, indexFrom = aggregation.indexFrom, count = aggregation.count;
|
||||||
var _a = this.analyzeJoin(entity, {
|
var _a = this.analyzeJoin(entity, {
|
||||||
|
|
|
||||||
|
|
@ -296,7 +296,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
};
|
};
|
||||||
|
|
||||||
maxAliasLength = 63;
|
maxAliasLength = 63;
|
||||||
private populateDataTypeDef(type: DataType | Ref, params?: DataTypeParams, enumeration?: string[]): string{
|
private populateDataTypeDef(type: DataType | Ref, params?: DataTypeParams, enumeration?: string[]): string {
|
||||||
if (['date', 'datetime', 'time', 'sequence'].includes(type)) {
|
if (['date', 'datetime', 'time', 'sequence'].includes(type)) {
|
||||||
return 'bigint ';
|
return 'bigint ';
|
||||||
}
|
}
|
||||||
|
|
@ -348,7 +348,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
if (MySqlTranslator.withWidthDataTypes.includes(type as DataType)) {
|
if (MySqlTranslator.withWidthDataTypes.includes(type as DataType)) {
|
||||||
assert(type === 'int');
|
assert(type === 'int');
|
||||||
const { width } = params!;
|
const { width } = params!;
|
||||||
switch(width!) {
|
switch (width!) {
|
||||||
case 1: {
|
case 1: {
|
||||||
return 'tinyint';
|
return 'tinyint';
|
||||||
}
|
}
|
||||||
|
|
@ -371,13 +371,13 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected translateAttrProjection(dataType: DataType, alias: string, attr: string): string {
|
protected translateAttrProjection(dataType: DataType, alias: string, attr: string): string {
|
||||||
switch(dataType) {
|
switch (dataType) {
|
||||||
case 'geometry': {
|
case 'geometry': {
|
||||||
return ` st_astext(\`${alias}\`.\`${attr}\`)`;
|
return ` st_astext(\`${alias}\`.\`${attr}\`)`;
|
||||||
}
|
}
|
||||||
default:{
|
default: {
|
||||||
return ` \`${alias}\`.\`${attr}\``;
|
return ` \`${alias}\`.\`${attr}\``;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -481,7 +481,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
throw new Error(`「${entity as string}」只能有一个sequence列`);
|
throw new Error(`「${entity as string}」只能有一个sequence列`);
|
||||||
}
|
}
|
||||||
hasSequence = sequenceStart;
|
hasSequence = sequenceStart;
|
||||||
sql += ' auto_increment unique ';
|
sql += ' auto_increment unique ';
|
||||||
}
|
}
|
||||||
if (defaultValue !== undefined) {
|
if (defaultValue !== undefined) {
|
||||||
assert(type !== 'ref');
|
assert(type !== 'ref');
|
||||||
|
|
@ -550,13 +550,13 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sql += ')';
|
sql += ')';
|
||||||
if (typeof hasSequence === 'number') {
|
if (typeof hasSequence === 'number') {
|
||||||
sql += `auto_increment = ${hasSequence}`;
|
sql += `auto_increment = ${hasSequence}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!replace) {
|
if (!replace) {
|
||||||
return [sql];
|
return [sql];
|
||||||
}
|
}
|
||||||
|
|
@ -564,7 +564,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private translateFnName(fnName: string, argumentNumber: number): string {
|
private translateFnName(fnName: string, argumentNumber: number): string {
|
||||||
switch(fnName) {
|
switch (fnName) {
|
||||||
case '$add': {
|
case '$add': {
|
||||||
let result = '%s';
|
let result = '%s';
|
||||||
while (--argumentNumber > 0) {
|
while (--argumentNumber > 0) {
|
||||||
|
|
@ -647,7 +647,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
}
|
}
|
||||||
case '$and': {
|
case '$and': {
|
||||||
let result = '';
|
let result = '';
|
||||||
for (let iter = 0; iter < argumentNumber; iter ++) {
|
for (let iter = 0; iter < argumentNumber; iter++) {
|
||||||
result += '%s';
|
result += '%s';
|
||||||
if (iter < argumentNumber - 1) {
|
if (iter < argumentNumber - 1) {
|
||||||
result += ' and ';
|
result += ' and ';
|
||||||
|
|
@ -657,7 +657,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
}
|
}
|
||||||
case '$or': {
|
case '$or': {
|
||||||
let result = '';
|
let result = '';
|
||||||
for (let iter = 0; iter < argumentNumber; iter ++) {
|
for (let iter = 0; iter < argumentNumber; iter++) {
|
||||||
result += '%s';
|
result += '%s';
|
||||||
if (iter < argumentNumber - 1) {
|
if (iter < argumentNumber - 1) {
|
||||||
result += ' or ';
|
result += ' or ';
|
||||||
|
|
@ -751,13 +751,13 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
else if (k.includes('#refId')) {
|
else if (k.includes('#refId')) {
|
||||||
const refId = (expr)['#refId'];
|
const refId = (expr)['#refId'];
|
||||||
const refAttr = (expr)['#refAttr'];
|
const refAttr = (expr)['#refAttr'];
|
||||||
|
|
||||||
assert(refDict[refId]);
|
assert(refDict[refId]);
|
||||||
const attrText = `\`${refDict[refId][0]}\`.\`${refAttr}\``;
|
const attrText = `\`${refDict[refId][0]}\`.\`${refAttr}\``;
|
||||||
result = this.translateAttrInExpression(entity, (expr)['#refAttr'], attrText);
|
result = this.translateAttrInExpression(entity, (expr)['#refAttr'], attrText);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assert (k.length === 1);
|
assert(k.length === 1);
|
||||||
if ((expr)[k[0]] instanceof Array) {
|
if ((expr)[k[0]] instanceof Array) {
|
||||||
const fnName = this.translateFnName(k[0], (expr)[k[0]].length);
|
const fnName = this.translateFnName(k[0], (expr)[k[0]].length);
|
||||||
const args = [fnName];
|
const args = [fnName];
|
||||||
|
|
@ -792,7 +792,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
};
|
};
|
||||||
|
|
||||||
return translateInner(expression);
|
return translateInner(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected populateSelectStmt<T extends keyof ED>(
|
protected populateSelectStmt<T extends keyof ED>(
|
||||||
projectionText: string,
|
projectionText: string,
|
||||||
|
|
@ -816,7 +816,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
sql += ` group by ${groupByText}`;
|
sql += ` group by ${groupByText}`;
|
||||||
}
|
}
|
||||||
if (typeof indexFrom === 'number') {
|
if (typeof indexFrom === 'number') {
|
||||||
assert (typeof count === 'number');
|
assert(typeof count === 'number');
|
||||||
sql += ` limit ${indexFrom}, ${count}`;
|
sql += ` limit ${indexFrom}, ${count}`;
|
||||||
}
|
}
|
||||||
if (option?.forUpdate) {
|
if (option?.forUpdate) {
|
||||||
|
|
@ -836,7 +836,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
sql += ` order by ${sorterText}`;
|
sql += ` order by ${sorterText}`;
|
||||||
}
|
}
|
||||||
if (typeof indexFrom === 'number') {
|
if (typeof indexFrom === 'number') {
|
||||||
assert (typeof count === 'number');
|
assert(typeof count === 'number');
|
||||||
sql += ` limit ${indexFrom}, ${count}`;
|
sql += ` limit ${indexFrom}, ${count}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -845,6 +845,21 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
protected populateRemoveStmt(removeText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: MysqlOperateOption): string {
|
protected populateRemoveStmt(removeText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: MysqlOperateOption): string {
|
||||||
// todo using index
|
// todo using index
|
||||||
const alias = aliasDict['./'];
|
const alias = aliasDict['./'];
|
||||||
|
if (option?.deletePhysically) {
|
||||||
|
let sql = `delete from ${fromText} `;
|
||||||
|
if (filterText) {
|
||||||
|
sql += ` where ${filterText}`;
|
||||||
|
}
|
||||||
|
if (sorterText) {
|
||||||
|
sql += ` order by ${sorterText}`;
|
||||||
|
}
|
||||||
|
if (typeof indexFrom === 'number') {
|
||||||
|
assert(typeof count === 'number');
|
||||||
|
sql += ` limit ${indexFrom}, ${count}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
let sql = `update ${fromText} set \`${alias}\`.\`$$deleteAt$$\` = '${now}'`;
|
let sql = `update ${fromText} set \`${alias}\`.\`$$deleteAt$$\` = '${now}'`;
|
||||||
if (filterText) {
|
if (filterText) {
|
||||||
|
|
@ -854,7 +869,7 @@ export class MySqlTranslator<ED extends EntityDict> extends SqlTranslator<ED> {
|
||||||
sql += ` order by ${sorterText}`;
|
sql += ` order by ${sorterText}`;
|
||||||
}
|
}
|
||||||
if (typeof indexFrom === 'number') {
|
if (typeof indexFrom === 'number') {
|
||||||
assert (typeof count === 'number');
|
assert(typeof count === 'number');
|
||||||
sql += ` limit ${indexFrom}, ${count}`;
|
sql += ` limit ${indexFrom}, ${count}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -934,6 +934,7 @@ export abstract class SqlTranslator<ED extends EntityDict> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private translateSelectInner<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], initialNumber: number, refAlias: Record<string, [string, keyof ED]>, option?: OP): {
|
private translateSelectInner<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], initialNumber: number, refAlias: Record<string, [string, keyof ED]>, option?: OP): {
|
||||||
|
filterStmt: string;
|
||||||
stmt: string;
|
stmt: string;
|
||||||
currentNumber: number;
|
currentNumber: number;
|
||||||
} {
|
} {
|
||||||
|
|
@ -955,6 +956,7 @@ export abstract class SqlTranslator<ED extends EntityDict> {
|
||||||
return {
|
return {
|
||||||
stmt: this.populateSelectStmt(projText, fromText, aliasDict, filterText, sorterText, undefined, indexFrom, count, option, selection),
|
stmt: this.populateSelectStmt(projText, fromText, aliasDict, filterText, sorterText, undefined, indexFrom, count, option, selection),
|
||||||
currentNumber: currentNumber2,
|
currentNumber: currentNumber2,
|
||||||
|
filterStmt: filterText,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -963,6 +965,10 @@ export abstract class SqlTranslator<ED extends EntityDict> {
|
||||||
return stmt;
|
return stmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
translateWhere<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], option?: OP): string {
|
||||||
|
const { filterStmt } = this.translateSelectInner(entity, selection, 1, {}, option);
|
||||||
|
return filterStmt;
|
||||||
|
}
|
||||||
|
|
||||||
translateAggregate<T extends keyof ED, OP extends SqlSelectOption>(entity: T, aggregation: ED[T]['Aggregation'], option?: OP): string {
|
translateAggregate<T extends keyof ED, OP extends SqlSelectOption>(entity: T, aggregation: ED[T]['Aggregation'], option?: OP): string {
|
||||||
const { data, filter, sorter, indexFrom, count } = aggregation;
|
const { data, filter, sorter, indexFrom, count } = aggregation;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue