11import { DatabaseBuilderError } from "./errors" ;
22import { KeyUtils } from "./key-utils" ;
33import { PrimaryKeyType } from "./enums/primary-key-type" ;
4- import { ExpressionOrColumn , Utils , ValueTypeToParse } from "./utils" ;
4+ import { ExpressionOrColumn , Utils , ValueType , ValueTypeToParse } from "./utils" ;
55import { ColumnsBaseBuilder } from "./columns-base-builder" ;
66import { Column } from "./column" ;
77import { FieldType } from "./enums/field-type" ;
@@ -13,60 +13,60 @@ export abstract class ColumnsValuesBuilder<
1313 T , TThis extends ColumnsValuesBuilder < T , TThis > >
1414 extends ColumnsBaseBuilder < TThis , T , Column > {
1515
16- // TODO: fixed list task
1716 constructor (
18- // metadata: MetadataTable<T>,
1917 mapperTable : MapperTable ,
20- modelToSave : T ,
21- // modelToSave: T = metadata.instance,
22- // modelToSave: T = void 0,
18+ modelToSave : T | Array < T > ,
2319 ) {
2420 super ( mapperTable , modelToSave ) ;
25- // super(metadata, modelToSave);
2621 }
2722
28- public setColumnValue (
23+ protected setColumnValue (
2924 column : string ,
30- value : ValueTypeToParse ,
25+ values : Array < ValueTypeToParse > ,
3126 fieldType : FieldType ,
3227 primaryKeyType ?: PrimaryKeyType
3328 ) : TThis {
34- switch ( primaryKeyType ) {
35- case PrimaryKeyType . Assigned :
36- if ( Utils . isNull ( value ) ) {
37- throw new DatabaseBuilderError ( "Primary key to be informed when generation strategy is 'Assigned'!" ) ;
38- }
39- break ;
40- case PrimaryKeyType . Guid :
41- if ( ( Utils . isNull ( value ) || ( value as string ) . length === 0 ) && this . allowGenerateKey ( ) ) {
42- // gerar GUID
43- value = Utils . GUID ( ) ;
44- // set value GUID in model
45- KeyUtils . setKey ( this . mapperTable , this . modelToSave , value ) ;
46- // KeyUtils.setKey(this.metadata, this.modelToSave, value);
47- }
48- break ;
49- case PrimaryKeyType . AutoIncrement :
50- default :
51- break ;
52- }
29+ values = values . map ( ( value , index ) => {
30+ switch ( primaryKeyType ) {
31+ case PrimaryKeyType . Assigned :
32+ if ( Utils . isNull ( value ) ) {
33+ throw new DatabaseBuilderError ( "Primary key to be informed when generation strategy is 'Assigned'!" ) ;
34+ }
35+ return value ;
36+ case PrimaryKeyType . Guid :
37+ if ( ( Utils . isNull ( value ) || ( value as string ) . length === 0 ) && this . allowGenerateKey ( ) ) {
38+ // gerar GUID
39+ value = Utils . GUID ( ) ;
40+ // set value GUID in model
41+ KeyUtils . setKey ( this . mapperTable ,
42+ Utils . isArray ( this . modelToSave )
43+ ? ( this . modelToSave as Array < T > ) [ index ]
44+ : this . modelToSave ,
45+ value ) ;
46+ }
47+ return value ;
48+ case PrimaryKeyType . AutoIncrement :
49+ default :
50+ return value ;
51+ }
52+ } ) ;
5353 this . columns . push ( {
5454 name : column ,
5555 type : fieldType ,
56- value : Utils . getValueType ( value , fieldType ) ,
56+ value : Utils . getValueType ( values , fieldType ) ,
5757 primaryKeyType
5858 } ) ;
5959 return this . getInstance ( ) ;
6060 }
6161
6262 public setValue < TReturn extends ValueTypeToParse > (
6363 expression : ExpressionOrColumn < TReturn , T > ,
64- value : TReturn ,
64+ value : TReturn | Array < TReturn > ,
6565 primaryKeyType ?: PrimaryKeyType
6666 ) : TThis {
6767 return this . setColumnValue (
6868 Utils . getColumn ( expression ) ,
69- value ,
69+ Utils . isArray ( value ) ? value as Array < TReturn > : [ value ] ,
7070 Utils . getType ( value ) ,
7171 primaryKeyType
7272 ) ;
@@ -95,17 +95,22 @@ export abstract class ColumnsValuesBuilder<
9595 const columnName = this . columnFormat ( column ) ;
9696 if ( ! Utils . isNull ( columnName ) ) {
9797 result . columns . push ( columnName ) ;
98- result . params . push ( Utils . isNull ( column . value ) ? null : column . value ) ;
98+ let values = ( Utils . isArray ( column . value ) ? column . value : [ column . value ] ) as Array < ValueType > ;
99+ for ( let index = 0 ; index < values . length ; index ++ ) {
100+ const item = values [ index ] ;
101+ if ( ! result . params [ index ] )
102+ result . params [ index ] = [ ] ;
103+ result . params [ index ] . push ( this . resolveNullValueType ( item ) ) ;
104+ }
99105 }
100106 }
101107 } ) ;
102108 return result ;
103109 }
104110
105- // Use: Utils.isNull(value)
106- // protected isValueNull(value: any): boolean {
107- // return value === void 0;
108- // }
111+ private resolveNullValueType ( value : ValueType ) : ValueType {
112+ return Utils . isNull ( value ) ? null : value ;
113+ }
109114
110115 protected allowGenerateKey ( ) : boolean {
111116 return false ;
@@ -124,7 +129,7 @@ export abstract class ColumnsValuesBuilder<
124129 return column . name ;
125130 }
126131
127- private getValueByExpression < TReturn > ( expression : ExpressionOrColumn < TReturn , T > ) : TReturn {
132+ protected getValueByExpression < TReturn > ( expression : ExpressionOrColumn < TReturn , T > ) : Array < TReturn > {
128133 return Utils . getValue ( this . modelToSave , expression ) ;
129134 }
130135}
0 commit comments