diff --git a/rdbstore/src/main/ets/decoration/Entity.ets b/rdbstore/src/main/ets/decoration/Entity.ets index 5975729..9eb842d 100644 --- a/rdbstore/src/main/ets/decoration/Entity.ets +++ b/rdbstore/src/main/ets/decoration/Entity.ets @@ -17,13 +17,27 @@ 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 * @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 +48,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 } diff --git a/rdbstore/src/ohosTest/ets/test/Ability.test.ets b/rdbstore/src/ohosTest/ets/test/Ability.test.ets index 1be4333..c0e8b8c 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 @@ -479,7 +482,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() }) @@ -513,8 +516,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) @@ -523,5 +526,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