orange-orm 4.1.0 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/changelog.md CHANGED
@@ -1,6 +1,10 @@
1
1
  ## Changelog
2
+ __4.1.2__
3
+ Bugfix with composite primary key with hasMany relation. [#106](https://github.com/alfateam/orange-orm/issues/106)
4
+ __4.1.1__
5
+ Some fixes regarding NotNull mappings. [#104](https://github.com/alfateam/orange-orm/issues/91)
2
6
  __4.1.0__
3
- Escape table and column names. [#91](https://github.com/alfateam/orange-orm/issues/91) [#92](https://github.com/alfateam/orange-orm/issues/92)
7
+ Escape table and column names. [#91](https://github.com/alfateam/orange-orm/issues/91) [#92](https://github.com/alfateam/orange-orm/issues/92)
4
8
  NotNullable relations [#104](https://github.com/alfateam/orange-orm/issues/104)
5
9
  __4.0.1__
6
10
  Inhouse definitions of ajv to avoid trouble with nestjs.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orange-orm",
3
- "version": "4.1.0",
3
+ "version": "4.1.2",
4
4
  "main": "./src/index.js",
5
5
  "browser": "./src/client/index.mjs",
6
6
  "bin": {
package/src/getManyDto.js CHANGED
@@ -1,9 +1,8 @@
1
+ const emptyFilter = require('./emptyFilter');
1
2
  const newQuery = require('./getManyDto/newQuery');
2
3
  const negotiateRawSqlFilter = require('./table/column/negotiateRawSqlFilter');
3
4
  const strategyToSpan = require('./table/strategyToSpan');
4
5
  const executeQueries = require('./table/executeQueries');
5
- const newPrimaryKeyFilter = require('./table/newPrimaryKeyFilter');
6
- const newForeignKeyFilter = require('./table/relation/newForeignKeyFilter');
7
6
 
8
7
  async function getManyDto(table, filter, strategy, spanFromParent) {
9
8
  filter = negotiateRawSqlFilter(filter, table);
@@ -151,7 +150,7 @@ async function decode(strategy, span, rows, keys = rows.length > 0 ? Object.keys
151
150
  function createGetIds() {
152
151
  const primaryColumns = table._primaryColumns;
153
152
  const length = primaryColumns.length;
154
- if (length > 1) {
153
+ if (length === 1) {
155
154
  const alias = table._primaryColumns[0].alias;
156
155
  return (row) => row[alias];
157
156
  }
@@ -186,7 +185,7 @@ async function decodeRelations(strategy, span, rawRows, resultRows, keys) {
186
185
  const name = leg.name;
187
186
  const table = span.table;
188
187
  const relation = table._relations[name];
189
- const filter = createOneFilter(relation, span._ids, resultRows, table);
188
+ const filter = createOneFilter(relation, span._ids);
190
189
  const rowsMap = span._rowsMap;
191
190
  const p = getManyDto(relation.childTable, filter, strategy[name], leg.span).then(subRows => {
192
191
  for (let i = 0; i < subRows.length; i++) {
@@ -207,21 +206,26 @@ async function decodeRelations(strategy, span, rawRows, resultRows, keys) {
207
206
  await Promise.all(promises);
208
207
  }
209
208
 
210
- function createOneFilter(relation, ids, parentRows, table) {
211
- let parentTable = relation.joinRelation.childTable;
209
+ function createOneFilter(relation, ids) {
210
+ const columns = relation.joinRelation.columns;
212
211
 
213
- if (parentTable._primaryColumns.length === 1)
214
- return relation.joinRelation.columns[0].in(ids);
212
+ if (columns.length === 1)
213
+ return columns[0].in(ids);
215
214
 
216
215
  else
217
216
  return createCompositeFilter();
218
217
 
219
218
  function createCompositeFilter() {
220
- var filter = newPrimaryKeyFilter.apply(null, parentRows[0]);
221
-
222
- for (var i = 1; i < ids.length; i++) {
223
- const args = [table].concat(parentRows[i]);
224
- filter = filter.or(newForeignKeyFilter.apply(null, args));
219
+ let filter = emptyFilter;
220
+ for(let id of ids) {
221
+ let nextFilter;
222
+ for (let i = 0; i < columns.length; i++) {
223
+ if (nextFilter)
224
+ nextFilter = nextFilter.and(columns[i].eq(id[i]));
225
+ else
226
+ nextFilter = columns[i].eq(id[i]);
227
+ }
228
+ filter = filter.or(nextFilter);
225
229
  }
226
230
  return filter;
227
231
  }
package/src/map.d.ts CHANGED
@@ -837,7 +837,7 @@ type ReferenceMapperHelper<TFrom, TTo, TPrimaryCount> =
837
837
  column4: C4,
838
838
  column5: C5,
839
839
  column6: C6
840
- ): MappedTableDef<TTo> & RelatedTable & NegotiateNotNullColumn<C1,TFrom>;
840
+ ): MappedTableDef<TTo> & RelatedTable & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable>;
841
841
  }
842
842
  : 5 extends TPrimaryCount
843
843
  ? {
@@ -847,7 +847,7 @@ type ReferenceMapperHelper<TFrom, TTo, TPrimaryCount> =
847
847
  column3: C3,
848
848
  column4: C4,
849
849
  column5: C5
850
- ): MappedTableDef<TTo> & RelatedTable & NegotiateNotNullColumn<C1,TFrom>;
850
+ ): MappedTableDef<TTo> & RelatedTable & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable>;
851
851
  }
852
852
  : 4 extends TPrimaryCount
853
853
  ? {
@@ -856,7 +856,7 @@ type ReferenceMapperHelper<TFrom, TTo, TPrimaryCount> =
856
856
  column2: C2,
857
857
  column3: C3,
858
858
  column4: C4
859
- ): MappedTableDef<TTo> & RelatedTable & NegotiateNotNullColumn<C1,TFrom>;
859
+ ): MappedTableDef<TTo> & RelatedTable & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable>;
860
860
  }
861
861
  : 3 extends TPrimaryCount
862
862
  ? {
@@ -864,24 +864,23 @@ type ReferenceMapperHelper<TFrom, TTo, TPrimaryCount> =
864
864
  column: C1,
865
865
  column2: C2,
866
866
  column3: C3
867
- ): MappedTableDef<TTo> & RelatedTable & NegotiateNotNullColumn<C1,TFrom>;
867
+ ): MappedTableDef<TTo> & RelatedTable & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable>;
868
868
  }
869
869
  : 2 extends TPrimaryCount
870
870
  ? {
871
871
  by<C1 extends keyof KeyCandidates1<TFrom, TTo>, C2 extends keyof KeyCandidates2<TFrom, TTo>>(
872
872
  column: C1,
873
873
  column2: C2
874
- ): MappedTableDef<TTo> & RelatedTable & NegotiateNotNullColumn<C1,TFrom>;
874
+ ): MappedTableDef<TTo> & RelatedTable & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable>;
875
875
  }
876
876
  : 1 extends TPrimaryCount
877
877
  ? {
878
878
  by<C1 extends keyof KeyCandidates1<TFrom, TTo>>(
879
879
  column: C1
880
- ): MappedTableDef<TTo> & RelatedTable & NegotiateNotNullColumn<C1,TFrom>;
880
+ ): MappedTableDef<TTo> & RelatedTable & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable>;
881
881
  }
882
882
  : {};
883
883
 
884
- type NegotiateNotNullColumn<C, TFrom> = C extends keyof TFrom ? TFrom[C] extends NotNullExceptInsert ? NotNullExceptInsert : TFrom[C] extends NotNull ? NotNull : {}: {};
885
884
 
886
885
  type HasMapperHelper<
887
886
  TFrom,
@@ -897,7 +896,7 @@ type HasMapperHelper<
897
896
  column4: keyof KeyCandidates4<TTo, TFrom>,
898
897
  column5: keyof KeyCandidates5<TTo, TFrom>,
899
898
  column6: keyof KeyCandidates6<TTo, TFrom>
900
- ): MappedTableDef<TTo> & RelatedTable & TExtra & HasMapperHelper2<MappedTableDef<TTo> & RelatedTable & TExtra>;
899
+ ): MappedTableDef<TTo> & RelatedTable & TExtra & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable & TExtra>;
901
900
  }
902
901
  : 5 extends TPrimaryCount
903
902
  ? {
@@ -907,7 +906,7 @@ type HasMapperHelper<
907
906
  column3: keyof KeyCandidates3<TTo, TFrom>,
908
907
  column4: keyof KeyCandidates4<TTo, TFrom>,
909
908
  column5: keyof KeyCandidates5<TTo, TFrom>
910
- ): MappedTableDef<TTo> & RelatedTable & TExtra & HasMapperHelper2<MappedTableDef<TTo> & RelatedTable & TExtra>;
909
+ ): MappedTableDef<TTo> & RelatedTable & TExtra & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable & TExtra>;
911
910
  }
912
911
  : 4 extends TPrimaryCount
913
912
  ? {
@@ -916,7 +915,7 @@ type HasMapperHelper<
916
915
  column2: keyof KeyCandidates2<TTo, TFrom>,
917
916
  column3: keyof KeyCandidates3<TTo, TFrom>,
918
917
  column4: keyof KeyCandidates4<TTo, TFrom>
919
- ): MappedTableDef<TTo> & RelatedTable & TExtra & HasMapperHelper2<MappedTableDef<TTo> & RelatedTable & TExtra>;
918
+ ): MappedTableDef<TTo> & RelatedTable & TExtra & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable & TExtra>;
920
919
  }
921
920
  : 3 extends TPrimaryCount
922
921
  ? {
@@ -924,26 +923,25 @@ type HasMapperHelper<
924
923
  column: keyof KeyCandidates1<TTo, TFrom>,
925
924
  column2: keyof KeyCandidates2<TTo, TFrom>,
926
925
  column3: keyof KeyCandidates3<TTo, TFrom>
927
- ): MappedTableDef<TTo> & RelatedTable & TExtra & HasMapperHelper2<MappedTableDef<TTo> & RelatedTable & TExtra>;
926
+ ): MappedTableDef<TTo> & RelatedTable & TExtra & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable & TExtra>;
928
927
  }
929
928
  : 2 extends TPrimaryCount
930
929
  ? {
931
930
  by(
932
931
  column: keyof KeyCandidates1<TTo, TFrom>,
933
932
  column2: keyof KeyCandidates2<TTo, TFrom>
934
- ): MappedTableDef<TTo> & RelatedTable & TExtra & HasMapperHelper2<MappedTableDef<TTo> & RelatedTable & TExtra>;
933
+ ): MappedTableDef<TTo> & RelatedTable & TExtra & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable & TExtra>;
935
934
  }
936
935
  : 1 extends TPrimaryCount
937
936
  ? {
938
937
  by(
939
938
  column: keyof KeyCandidates1<TTo, TFrom>
940
- ): MappedTableDef<TTo> & RelatedTable & TExtra & HasMapperHelper2<MappedTableDef<TTo> & RelatedTable & TExtra>;
939
+ ): MappedTableDef<TTo> & RelatedTable & TExtra & NotNullRelationHelper<MappedTableDef<TTo> & RelatedTable & TExtra>;
941
940
  }
942
941
  : {};
943
942
 
944
- type HasMapperHelper2<T> = {
943
+ type NotNullRelationHelper<T> = {
945
944
  notNull(): T & NotNull;
946
- notNullExceptInsert(): T & NotNull & NotNullExceptInsert;
947
945
  }
948
946
 
949
947
  type ColumnMapperInit<T> = {
@@ -1207,7 +1205,7 @@ type StrategyToUpdateRowData<T> = Omit<{
1207
1205
  : T[K] extends ManyRelation
1208
1206
  ? StrategyToInsertRowData<T[K]>[]
1209
1207
  : StrategyToInsertRowData<T[K]>;
1210
- }, 'formulaDiscriminators' | 'columnDiscriminators' | 'map' | ' isManyRelation' | ' relatedTable' | ' isOneRelation'>
1208
+ }, 'formulaDiscriminators' | 'columnDiscriminators' | ' notNull' | ' notNullExceptInsert' | 'map' | ' isManyRelation' | ' relatedTable' | ' isOneRelation'>
1211
1209
  ;
1212
1210
 
1213
1211
  type StrategyToInsertRowData<T> = Omit<{
@@ -1258,7 +1256,7 @@ type StrategyToInsertRowData<T> = Omit<{
1258
1256
  : T[K] extends ManyRelation
1259
1257
  ? StrategyToInsertRowData<T[K]>[]
1260
1258
  : StrategyToInsertRowData<T[K]>;
1261
- }, 'formulaDiscriminators' | 'columnDiscriminators' | 'map' | ' isManyRelation' | ' relatedTable' | ' isOneRelation'>
1259
+ }, 'formulaDiscriminators' | 'columnDiscriminators' | ' notNull' | ' notNullExceptInsert' | 'map' | ' isManyRelation' | ' relatedTable' | ' isOneRelation'>
1262
1260
  ;
1263
1261
 
1264
1262
  type NegotiateDefaultStrategy<T> = T extends ColumnSymbols ? T : never;
@@ -23,6 +23,7 @@ function newOne(joinRelation) {
23
23
  };
24
24
 
25
25
  c.notNull = function() {
26
+
26
27
  return c;
27
28
  };
28
29
 
package/src/table/join.js CHANGED
@@ -36,6 +36,15 @@ function newJoin(parentTable, childTable) {
36
36
 
37
37
  return relation;
38
38
  };
39
+
40
+ c.notNullExceptInsert = function() {
41
+ return c;
42
+ };
43
+
44
+ c.notNull = function() {
45
+ return c;
46
+ };
47
+
39
48
  return c;
40
49
  }
41
50
 
@@ -2,7 +2,7 @@ function outputInsertedSql(table) {
2
2
  let separator = '';
3
3
  let result = 'OUTPUT ';
4
4
  for (let i = 0; i < table._columns.length; i++) {
5
- result += separator + 'INSERTED.' + table._columns[i]._dbName;
5
+ result += separator + 'INSERTED.[' + table._columns[i]._dbName + ']';
6
6
  separator = ',';
7
7
  }
8
8
  return result;