oak-db/test/testSqlTranslator.ts

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);
})
});