From 8cc9e957cb347ba8fd6a2646ce69bf54e505b754 Mon Sep 17 00:00:00 2001 From: Peercat Date: Fri, 23 May 2025 14:04:34 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=89=B9=E6=80=A7?= =?UTF-8?q?=EF=BC=9ATableInfo=E6=8E=A5=E5=8F=A3tableName=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E7=BC=BA=E7=9C=81=EF=BC=8C=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E4=BD=BF=E7=94=A8Entity=E8=A3=85=E9=A5=B0=E7=9A=84=E7=B1=BB?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rdbstore/src/main/ets/decoration/Entity.ets | 8 ++++++-- rdbstore/src/main/ets/decoration/Weave.ets | 8 +++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/rdbstore/src/main/ets/decoration/Entity.ets b/rdbstore/src/main/ets/decoration/Entity.ets index 5975729..9aca964 100644 --- a/rdbstore/src/main/ets/decoration/Entity.ets +++ b/rdbstore/src/main/ets/decoration/Entity.ets @@ -22,8 +22,11 @@ import { RdbConst } from '../RdbConst'; * @param tableInfo * @returns */ -export function Entity(tableInfo: TableInfo): ClassDecorator { +export function Entity(tableInfo: TableInfo = {}): ClassDecorator { return (target: object) => { + if (tableInfo.tableName === undefined) { + tableInfo.tableName = target['name'] + } target[RdbConst.TABLE] = tableInfo }; } @@ -34,8 +37,9 @@ export function Entity(tableInfo: TableInfo): ClassDecorator { export interface TableInfo { /** * 表名 + * @default 被装饰的类名 */ - tableName: string + tableName?: string /** * 索引信息 */ diff --git a/rdbstore/src/main/ets/decoration/Weave.ets b/rdbstore/src/main/ets/decoration/Weave.ets index 0a359b5..553b50b 100644 --- a/rdbstore/src/main/ets/decoration/Weave.ets +++ b/rdbstore/src/main/ets/decoration/Weave.ets @@ -48,7 +48,7 @@ export namespace Weave { */ function generatePropertyInfo(tableInfo: TableInfo, entityCls: ClassConstructor) { const tableMeta = new TableMetaInfo() - tableMeta.tableName = tableInfo.tableName + tableMeta.tableName = tableInfo.tableName! tableMeta.entityCls = entityCls tableMeta.index = tableInfo.index?.map((item) => new IndexMetaInfo(item.name, item.columnName, item.unique)) ?? new Array @@ -115,8 +115,10 @@ export namespace Weave { */ function ignoreNode(entityCls: ClassConstructor, propName: string) { if (propName) { - const columnInfo: ColumnInfo = entityCls.prototype[RdbConst.COLUMN] ? entityCls.prototype[RdbConst.COLUMN][propName] : undefined - const embedded: EmbeddedInfo = entityCls.prototype[RdbConst.EMBEDDED] ? entityCls.prototype[RdbConst.EMBEDDED][propName] : undefined + const columnInfo: ColumnInfo = + entityCls.prototype[RdbConst.COLUMN] ? entityCls.prototype[RdbConst.COLUMN][propName] : undefined + const embedded: EmbeddedInfo = + entityCls.prototype[RdbConst.EMBEDDED] ? entityCls.prototype[RdbConst.EMBEDDED][propName] : undefined if (!columnInfo && !embedded) { return true } From 264c253366fe7d737a45d0f8a8f67c32a7ce5dc7 Mon Sep 17 00:00:00 2001 From: Peercat Date: Fri, 23 May 2025 14:06:12 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=89=B9=E6=80=A7?= =?UTF-8?q?=EF=BC=9A=E6=96=B0=E5=A2=9E=E9=BB=98=E8=AE=A4=E8=A1=A8=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3@Table=EF=BC=8C=E5=85=81=E8=AE=B8=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E4=BD=BF=E7=94=A8@Table=E8=A3=85=E9=A5=B0=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E6=97=A0=E9=9C=80=E5=B0=BE=E9=9A=8F=E8=B0=83=E7=94=A8=EF=BC=8C?= =?UTF-8?q?=E5=9C=A8=E6=B2=A1=E6=9C=89=E6=8C=87=E5=AE=9Aindex=E5=8F=8Atabl?= =?UTF-8?q?eName=E6=97=B6=E6=8F=90=E4=BE=9B=E6=9B=B4=E6=96=B9=E4=BE=BF?= =?UTF-8?q?=E7=9A=84=E8=B0=83=E7=94=A8=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rdbstore/src/main/ets/decoration/Entity.ets | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/rdbstore/src/main/ets/decoration/Entity.ets b/rdbstore/src/main/ets/decoration/Entity.ets index 9aca964..9eb842d 100644 --- a/rdbstore/src/main/ets/decoration/Entity.ets +++ b/rdbstore/src/main/ets/decoration/Entity.ets @@ -17,6 +17,17 @@ import { PropertyConverter } from '../model/relation/converter/ConvertParameter'; import { RdbConst } from '../RdbConst'; +/** + * 表注解,无需传入参数 + * @param target + */ +export function Table(target: object) { + let tableInfo: TableInfo = { + tableName: target['name'] + } + target[RdbConst.TABLE] = tableInfo +} + /** * 表注解 * @param tableInfo From 21edd7aa64f004b3eccb6384ae83a48a49a673ec Mon Sep 17 00:00:00 2001 From: Peercat Date: Fri, 23 May 2025 14:06:28 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/ohosTest/ets/test/Ability.test.ets | 31 +++++++--- .../src/ohosTest/ets/test/model/Entity.ets | 58 ++++++++++++++++--- 2 files changed, 72 insertions(+), 17 deletions(-) diff --git a/rdbstore/src/ohosTest/ets/test/Ability.test.ets b/rdbstore/src/ohosTest/ets/test/Ability.test.ets index 8ebc109..09ce01d 100644 --- a/rdbstore/src/ohosTest/ets/test/Ability.test.ets +++ b/rdbstore/src/ohosTest/ets/test/Ability.test.ets @@ -45,6 +45,8 @@ import { SampleEntity2, SampleEntity20, SampleEntity21, + SampleEntity22, + SampleEntity23, SampleEntity3, SampleEntity4, SampleEntity5, @@ -94,7 +96,10 @@ export default function abilityTest() { let dao21: RdbDao let context: Context let startTime = 1 - + let entities = [SampleEntity, SampleEntity2, SampleEntity3, SampleEntity4, SampleEntity5, SampleEntity6, + SampleEntity7, SampleEntity8, SampleEntity9, SampleEntity10, SampleEntity11, SampleEntity12, SampleEntity13, + SampleEntity14, SampleEntity15, SampleEntity16, SampleEntity17, SampleEntity18, SampleEntity19, SampleEntity20, + SampleEntity21, SampleEntity22, SampleEntity23]; beforeAll(async () => { //start tested ability const want: Want = { @@ -112,9 +117,7 @@ export default function abilityTest() { db = Rdb.databaseBuilder(context, { version: 1, dbName: 'stream.db', - entities: [SampleEntity, SampleEntity2, SampleEntity3, SampleEntity4, SampleEntity5, SampleEntity6, - SampleEntity7, SampleEntity8, SampleEntity9, SampleEntity10,SampleEntity11, SampleEntity12, SampleEntity13, SampleEntity14, SampleEntity15, SampleEntity16, SampleEntity17, - SampleEntity18, SampleEntity19, SampleEntity20, SampleEntity21], + entities, migrations: [migration1_2, migration2_4], encrypt: false, securityLevel: relationalStore.SecurityLevel.S1, @@ -187,7 +190,7 @@ export default function abilityTest() { model3.age = 100 model2.name = 'batch' model.name = 'batch-insert' - await dao.batchInsert([model,model, model2, model3]) + await dao.batchInsert([model, model, model2, model3]) const list = await dao.queryAll() const model1 = list.find(item => { return item.id == 1 @@ -480,7 +483,7 @@ export default function abilityTest() { await db.initTask const tablesAfterDelete = await db.getAllTable() - expect(tablesAfterDelete.length).assertEqual(20) + expect(tablesAfterDelete.length).assertEqual(entities.length - 1) done() }) @@ -514,8 +517,8 @@ export default function abilityTest() { // }) }) - describe('feature',() => { - it('defaultColumnName', 0, async (done:Function) => { + describe('feature', () => { + it('defaultColumnName', 0, async (done: Function) => { dao21 = await db.getDao(SampleEntity21) let columns = await dao21.getAllColumns() expect(columns.includes('id')).assertEqual(true) @@ -524,5 +527,17 @@ export default function abilityTest() { expect(columns.includes('bigId')).assertEqual(true) done() }) + + it('defaultTableName', 0, async (done: Function) => { + let dao22 = await db.getDao(SampleEntity22) + expect(dao22.config.tableName).assertEqual('SampleEntity22') + done() + }) + + it('tableDecorator', 0, async (done: Function) => { + let dao23 = await db.getDao(SampleEntity23) + expect(dao23.config.tableName).assertEqual('SampleEntity23') + done() + }) }) } \ No newline at end of file diff --git a/rdbstore/src/ohosTest/ets/test/model/Entity.ets b/rdbstore/src/ohosTest/ets/test/model/Entity.ets index 41ce169..f777589 100644 --- a/rdbstore/src/ohosTest/ets/test/model/Entity.ets +++ b/rdbstore/src/ohosTest/ets/test/model/Entity.ets @@ -18,6 +18,7 @@ import { BigIntToStringConvertor, Columns, ColumnType, + Table, Embedded, Entity } from '../../../../../Index'; @@ -80,9 +81,7 @@ export class SampleEntity { targetClass: Child }) child: Child = new Child() - paramInt: number = 1 - child2: Child = new Child() } @@ -91,7 +90,6 @@ export class Sample extends SampleEntity { } - @Entity({ tableName: 'SampleEntity2', index: [{ name: 'SampleEntity2idIndex', columnName: ['age', 'id'] }, @@ -149,7 +147,6 @@ export class SampleEntity3 { } - @Entity({ tableName: 'SampleEntity4', index: [{ name: 'SampleEntity4idIndex', columnName: ['age', 'id'] }] @@ -202,7 +199,6 @@ export class SampleEntity5 { } - @Entity({ tableName: 'SampleEntity6', index: [{ name: 'SampleEntity6idIndex', columnName: ['age', 'id'] }] @@ -255,7 +251,6 @@ export class SampleEntity7 { } - @Entity({ tableName: 'SampleEntity8', index: [{ name: 'SampleEntity8idIndex', columnName: ['age', 'id'] }] @@ -308,7 +303,6 @@ export class SampleEntity9 { } - @Entity({ tableName: 'SampleEntity10', index: [{ name: 'SampleEntity10idIndex', columnName: ['age', 'id'] }] @@ -361,7 +355,6 @@ export class SampleEntity11 { } - @Entity({ tableName: 'SampleEntity12', index: [{ name: 'SampleEntity12idIndex', columnName: ['age', 'id'] }] @@ -414,7 +407,6 @@ export class SampleEntity13 { } - @Entity({ tableName: 'SampleEntity14', index: [{ name: 'SampleEntity14idIndex', columnName: ['age', 'id'] }] @@ -615,4 +607,52 @@ export class SampleEntity21 { targetClass: Child }) child: Child = new Child() +} + +/** + * 用于Entity装饰器tableName属性缺省单元测试 + */ +@Entity() +export class SampleEntity22 { + @Columns({ + type: ColumnType.INTEGER, + isPrimaryKey: true, + autoincrement: true + }) + id: number | null = null; + @Columns({ type: ColumnType.INTEGER }) + age: number = -1 + @Columns({ type: ColumnType.TEXT }) + name: string = '' + @Columns({ type: ColumnType.TEXT, convertor: BigIntToStringConvertor }) + bigId: bigint = 1n + @Embedded({ + prefix: '', + targetClass: Child + }) + child: Child = new Child() +} + +/** + * 用于Table装饰器tableName属性缺省单元测试 + */ +@Table +export class SampleEntity23 { + @Columns({ + type: ColumnType.INTEGER, + isPrimaryKey: true, + autoincrement: true + }) + id: number | null = null; + @Columns({ type: ColumnType.INTEGER }) + age: number = -1 + @Columns({ type: ColumnType.TEXT }) + name: string = '' + @Columns({ type: ColumnType.TEXT, convertor: BigIntToStringConvertor }) + bigId: bigint = 1n + @Embedded({ + prefix: '', + targetClass: Child + }) + child: Child = new Child() } \ No newline at end of file