186 lines
4.7 KiB
TypeScript
186 lines
4.7 KiB
TypeScript
import { describe, it } from 'mocha';
|
|
import { MySqlTranslator } from '../lib/MySQL/translator';
|
|
import { EntityDict, storageSchema } from './test-app-domain';
|
|
|
|
describe('test MysqlTranslator', function () {
|
|
this.timeout(100000);
|
|
let translator: MySqlTranslator<EntityDict>;
|
|
before(() => {
|
|
translator = new MySqlTranslator(storageSchema);
|
|
});
|
|
|
|
it('test create', () => {
|
|
const sql = translator.translateCreateEntity('token');
|
|
// console.log(sql);
|
|
});
|
|
|
|
it('test insert', () => {
|
|
const sql = translator.translateInsert('user', [{
|
|
id: 'xcxc',
|
|
name: 'xc',
|
|
nickname: 'xcxcxc',
|
|
}, {
|
|
id: 'gggg',
|
|
name: 'gg',
|
|
nickname: 'gggggg',
|
|
}]);
|
|
// console.log(sql);
|
|
});
|
|
|
|
it('test select', () => {
|
|
let sql = translator.translateSelect('token', {
|
|
data: {
|
|
id: 1,
|
|
$$createAt$$: 1,
|
|
userId: 1,
|
|
},
|
|
});
|
|
// console.log(sql);
|
|
|
|
// distinct
|
|
sql = translator.translateSelect('token', {
|
|
data: {
|
|
id: 1,
|
|
$$createAt$$: 1,
|
|
userId: 1,
|
|
},
|
|
distinct: true,
|
|
});
|
|
// console.log(sql);
|
|
});
|
|
|
|
it('test expression', () => {
|
|
const sql = translator.translateSelect('token', {
|
|
data: {
|
|
id: 1,
|
|
$expr: {
|
|
$dateDiff: [{
|
|
"#attr": '$$createAt$$',
|
|
}, new Date(), 'd'],
|
|
}
|
|
},
|
|
});
|
|
// console.log(sql);
|
|
});
|
|
|
|
it('test expression2', () => {
|
|
const sql = translator.translateSelect('token', {
|
|
data: {
|
|
id: 1,
|
|
$expr: {
|
|
$concat: [
|
|
{
|
|
$year: {
|
|
'#attr': '$$createAt$$',
|
|
},
|
|
},
|
|
'-',
|
|
{
|
|
$month: {
|
|
'#attr': '$$createAt$$',
|
|
}
|
|
},
|
|
'-',
|
|
{
|
|
$dayOfMonth: {
|
|
'#attr': '$$createAt$$',
|
|
}
|
|
}
|
|
],
|
|
}
|
|
},
|
|
});
|
|
// console.log(sql);
|
|
})
|
|
|
|
it('test aggregation', () => {
|
|
let sql = translator.translateAggregate('token', {
|
|
data: {
|
|
'#max-1': {
|
|
user: {
|
|
nickname: 1,
|
|
},
|
|
},
|
|
'#aggr': {
|
|
env: {
|
|
type: 1,
|
|
}
|
|
},
|
|
},
|
|
filter: {
|
|
user: {
|
|
name: {
|
|
$includes: 'xc',
|
|
},
|
|
},
|
|
},
|
|
indexFrom: 0,
|
|
count: 10,
|
|
});
|
|
|
|
// distinct
|
|
sql = translator.translateAggregate('token', {
|
|
data: {
|
|
'#count-1': {
|
|
user: {
|
|
nickname: 1,
|
|
},
|
|
},
|
|
distinct: true,
|
|
},
|
|
filter: {
|
|
user: {
|
|
name: {
|
|
$includes: 'xc',
|
|
},
|
|
},
|
|
},
|
|
indexFrom: 0,
|
|
count: 10,
|
|
distinct: true,
|
|
});
|
|
|
|
console.log(sql);
|
|
});
|
|
|
|
it('test or', () => {
|
|
const sql = translator.translateSelect('token', {
|
|
data: {
|
|
id: 1,
|
|
$$createAt$$: 1,
|
|
userId: 1,
|
|
},
|
|
filter: {
|
|
id: 'xc',
|
|
$$createAt$$: 1,
|
|
},
|
|
});
|
|
console.log(sql);
|
|
});
|
|
|
|
it('test complex one to many', () => {
|
|
const sql = translator.translateSelect('user', {
|
|
data: {
|
|
id: 1,
|
|
$$createAt$$: 1,
|
|
},
|
|
filter: {
|
|
id: 'xc',
|
|
$$createAt$$: 1,
|
|
$and: [
|
|
{
|
|
token$user: {
|
|
entity: 'email',
|
|
}
|
|
},
|
|
{
|
|
token$user: {
|
|
entity: 'mobile',
|
|
}
|
|
}
|
|
]
|
|
},
|
|
});
|
|
console.log(sql);
|
|
})
|
|
}); |