Commit 8e375042 authored by nanahira's avatar nanahira

fix autoinc

parent 65bb759a
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@minatojs/core": "^2.0.1", "@minatojs/core": "^2.0.1",
"cosmokit": "^1.4.1",
"typed-reflector": "^1.0.10" "typed-reflector": "^1.0.10"
}, },
"devDependencies": { "devDependencies": {
...@@ -1868,9 +1869,9 @@ ...@@ -1868,9 +1869,9 @@
} }
}, },
"node_modules/cosmokit": { "node_modules/cosmokit": {
"version": "1.3.3", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.3.3.tgz", "resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.4.1.tgz",
"integrity": "sha512-jpEp5zDrGbycu8AdaCjmNNr2J617NAFvAU6GM8o/dJP2/pe80qTbPoflqyJzAuMhiaC6QCXlBP0KCusTsDemPQ==" "integrity": "sha512-d3ZRpKFahJRvLbo1T4y0ELCudjk9AeDUsfgKm+iAti6yPCeoPLGNUGT4expTWsNkrSA1uk7CKhtBPiizFYvDgA=="
}, },
"node_modules/cross-spawn": { "node_modules/cross-spawn": {
"version": "7.0.3", "version": "7.0.3",
...@@ -6735,9 +6736,9 @@ ...@@ -6735,9 +6736,9 @@
} }
}, },
"cosmokit": { "cosmokit": {
"version": "1.3.3", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.3.3.tgz", "resolved": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.4.1.tgz",
"integrity": "sha512-jpEp5zDrGbycu8AdaCjmNNr2J617NAFvAU6GM8o/dJP2/pe80qTbPoflqyJzAuMhiaC6QCXlBP0KCusTsDemPQ==" "integrity": "sha512-d3ZRpKFahJRvLbo1T4y0ELCudjk9AeDUsfgKm+iAti6yPCeoPLGNUGT4expTWsNkrSA1uk7CKhtBPiizFYvDgA=="
}, },
"cross-spawn": { "cross-spawn": {
"version": "7.0.3", "version": "7.0.3",
......
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
}, },
"dependencies": { "dependencies": {
"@minatojs/core": "^2.0.1", "@minatojs/core": "^2.0.1",
"cosmokit": "^1.4.1",
"typed-reflector": "^1.0.10" "typed-reflector": "^1.0.10"
} }
} }
import { Database, Field, Flatten, Keys, Model } from '@minatojs/core'; import { Database, Field, Flatten, Keys, Model } from '@minatojs/core';
import { makeArray } from 'cosmokit';
import { ModelClassType } from './def'; import { ModelClassType } from './def';
import { reflector } from './meta/meta'; import { reflector } from './meta/meta';
import './model-workaround'; import './model-workaround';
...@@ -80,7 +81,7 @@ class TableRegistrar<Tables, T = any> { ...@@ -80,7 +81,7 @@ class TableRegistrar<Tables, T = any> {
autoInc: extDefs.some((ext) => ext.autoInc), autoInc: extDefs.some((ext) => ext.autoInc),
}; };
for (const extDef of extDefs) { for (const extDef of extDefs) {
if (extDef.primary) { if (extDef.primary?.length) {
if (!result.primary) { if (!result.primary) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
...@@ -88,9 +89,18 @@ class TableRegistrar<Tables, T = any> { ...@@ -88,9 +89,18 @@ class TableRegistrar<Tables, T = any> {
} }
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
result.primary = (result.primary as Keys<T, any>[]).concat( result.primary = makeArray(result.primary).concat(
extDef.primary, // 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 (extDef.unique) {
if (!result.unique) { if (!result.unique) {
......
...@@ -5,6 +5,7 @@ import { ModelRegistrar } from '../src/register'; ...@@ -5,6 +5,7 @@ import { ModelRegistrar } from '../src/register';
interface Tables { interface Tables {
dress: Dress; dress: Dress;
dress2: Dress2;
} }
const decorators = new ModelDecorators<Tables>(); const decorators = new ModelDecorators<Tables>();
...@@ -41,6 +42,17 @@ class Dress { ...@@ -41,6 +42,17 @@ class Dress {
properties: DressProperty; 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', () => { describe('Model test', () => {
let model: Database<Tables>; let model: Database<Tables>;
...@@ -49,6 +61,7 @@ describe('Model test', () => { ...@@ -49,6 +61,7 @@ describe('Model test', () => {
await model.connect(MemoryDriver, {}); await model.connect(MemoryDriver, {});
const registrar = new ModelRegistrar(model); const registrar = new ModelRegistrar(model);
registrar.registerModel(Dress); registrar.registerModel(Dress);
registrar.registerModel(Dress2);
}); });
it('should register model fields', () => { it('should register model fields', () => {
...@@ -64,9 +77,14 @@ describe('Model test', () => { ...@@ -64,9 +77,14 @@ describe('Model test', () => {
expect(sizeConfig.length).toBe(7); 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', () => { it('should register model extras', () => {
const { dress } = model.tables; const { dress } = model.tables;
expect(dress.primary[0]).toBe('id'); expect(dress.primary).toBe('id');
expect(dress.unique[0][0]).toBe('name'); expect(dress.unique[0][0]).toBe('name');
expect(dress.foreign.parentId).toStrictEqual(['dress', 'id']); expect(dress.foreign.parentId).toStrictEqual(['dress', 'id']);
//expect(dress.internal['']).toEqual(Dress.prototype); //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