Commit 8e375042 authored by nanahira's avatar nanahira

fix autoinc

parent 65bb759a
......@@ -10,6 +10,7 @@
"license": "MIT",
"dependencies": {
"@minatojs/core": "^2.0.1",
"cosmokit": "^1.4.1",
"typed-reflector": "^1.0.10"
},
"devDependencies": {
......@@ -1868,9 +1869,9 @@
}
},
"node_modules/cosmokit": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.3.3.tgz",
"integrity": "sha512-jpEp5zDrGbycu8AdaCjmNNr2J617NAFvAU6GM8o/dJP2/pe80qTbPoflqyJzAuMhiaC6QCXlBP0KCusTsDemPQ=="
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.4.1.tgz",
"integrity": "sha512-d3ZRpKFahJRvLbo1T4y0ELCudjk9AeDUsfgKm+iAti6yPCeoPLGNUGT4expTWsNkrSA1uk7CKhtBPiizFYvDgA=="
},
"node_modules/cross-spawn": {
"version": "7.0.3",
......@@ -6735,9 +6736,9 @@
}
},
"cosmokit": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.3.3.tgz",
"integrity": "sha512-jpEp5zDrGbycu8AdaCjmNNr2J617NAFvAU6GM8o/dJP2/pe80qTbPoflqyJzAuMhiaC6QCXlBP0KCusTsDemPQ=="
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.4.1.tgz",
"integrity": "sha512-d3ZRpKFahJRvLbo1T4y0ELCudjk9AeDUsfgKm+iAti6yPCeoPLGNUGT4expTWsNkrSA1uk7CKhtBPiizFYvDgA=="
},
"cross-spawn": {
"version": "7.0.3",
......
......@@ -56,6 +56,7 @@
},
"dependencies": {
"@minatojs/core": "^2.0.1",
"cosmokit": "^1.4.1",
"typed-reflector": "^1.0.10"
}
}
import { Database, Field, Flatten, Keys, Model } from '@minatojs/core';
import { makeArray } from 'cosmokit';
import { ModelClassType } from './def';
import { reflector } from './meta/meta';
import './model-workaround';
......@@ -80,7 +81,7 @@ class TableRegistrar<Tables, T = any> {
autoInc: extDefs.some((ext) => ext.autoInc),
};
for (const extDef of extDefs) {
if (extDef.primary) {
if (extDef.primary?.length) {
if (!result.primary) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
......@@ -88,9 +89,18 @@ class TableRegistrar<Tables, T = any> {
}
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
result.primary = (result.primary as Keys<T, any>[]).concat(
extDef.primary,
result.primary = makeArray(result.primary).concat(
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
makeArray(extDef.primary),
);
if (result.primary.length === 1) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
result.primary = result.primary[0];
} else if (result.primary.length === 0) {
delete result.primary;
}
}
if (extDef.unique) {
if (!result.unique) {
......
......@@ -5,6 +5,7 @@ import { ModelRegistrar } from '../src/register';
interface Tables {
dress: Dress;
dress2: Dress2;
}
const decorators = new ModelDecorators<Tables>();
......@@ -41,6 +42,17 @@ class Dress {
properties: DressProperty;
}
@decorators.DefineModel('dress2')
class Dress2 {
@decorators.Primary()
@decorators.ModelField('string')
owner: string;
@decorators.ModelField('integer(11)')
@decorators.Primary()
size: number;
}
describe('Model test', () => {
let model: Database<Tables>;
......@@ -49,6 +61,7 @@ describe('Model test', () => {
await model.connect(MemoryDriver, {});
const registrar = new ModelRegistrar(model);
registrar.registerModel(Dress);
registrar.registerModel(Dress2);
});
it('should register model fields', () => {
......@@ -64,9 +77,14 @@ describe('Model test', () => {
expect(sizeConfig.length).toBe(7);
});
it('should handle double primary', () => {
const { dress2 } = model.tables;
expect(dress2.primary).toStrictEqual(['owner', 'size']);
})
it('should register model extras', () => {
const { dress } = model.tables;
expect(dress.primary[0]).toBe('id');
expect(dress.primary).toBe('id');
expect(dress.unique[0][0]).toBe('name');
expect(dress.foreign.parentId).toStrictEqual(['dress', 'id']);
//expect(dress.internal['']).toEqual(Dress.prototype);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment