orange-orm 4.5.1 → 4.5.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,4 +1,6 @@
1
1
  ## Changelog
2
+ __4.5.2__
3
+ Bugfix: Aggregate functions are not allowed on root tables . See [#120](https://github.com/alfateam/orange-orm/issues/121)
2
4
  __4.5.1__
3
5
  Bugfix: "Changed by Other User" Error Triggered by Precision Mismatch in Numeric Column. See [#120](https://github.com/alfateam/orange-orm/issues/120)
4
6
  __4.5.0__
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orange-orm",
3
- "version": "4.5.1",
3
+ "version": "4.5.2",
4
4
  "main": "./src/index.js",
5
5
  "browser": "./src/client/index.mjs",
6
6
  "bin": {
@@ -3951,6 +3951,178 @@ function requireExtractAlias () {
3951
3951
  return extractAlias;
3952
3952
  }
3953
3953
 
3954
+ var columnAggregate_1$1;
3955
+ var hasRequiredColumnAggregate$1;
3956
+
3957
+ function requireColumnAggregate$1 () {
3958
+ if (hasRequiredColumnAggregate$1) return columnAggregate_1$1;
3959
+ hasRequiredColumnAggregate$1 = 1;
3960
+ const getSessionSingleton = requireGetSessionSingleton();
3961
+
3962
+ function columnAggregate(context, operator, column, table, coalesce = true) {
3963
+ const quote = getSessionSingleton(context, 'quote');
3964
+
3965
+ const tableAlias = quote(table._rootAlias || table._dbName);
3966
+ const columnName = quote(column._dbName);
3967
+
3968
+ return {
3969
+ expression: (alias) => coalesce ? `COALESCE(${operator}(${tableAlias}.${columnName}), 0) as ${quote(alias)}` : `${operator}(${tableAlias}.${columnName}) as ${quote(alias)}`,
3970
+ joins: ['']
3971
+ };
3972
+ }
3973
+
3974
+ columnAggregate_1$1 = columnAggregate;
3975
+ return columnAggregate_1$1;
3976
+ }
3977
+
3978
+ var newDiscriminatorSql_1$1;
3979
+ var hasRequiredNewDiscriminatorSql$1;
3980
+
3981
+ function requireNewDiscriminatorSql$1 () {
3982
+ if (hasRequiredNewDiscriminatorSql$1) return newDiscriminatorSql_1$1;
3983
+ hasRequiredNewDiscriminatorSql$1 = 1;
3984
+ const getSessionSingleton = requireGetSessionSingleton();
3985
+
3986
+ function newDiscriminatorSql(context, table, alias) {
3987
+ const quote = getSessionSingleton(context, 'quote');
3988
+ alias = quote(alias);
3989
+ var result = '';
3990
+ var formulaDiscriminators = table._formulaDiscriminators;
3991
+ var columnDiscriminators = table._columnDiscriminators;
3992
+ addFormula();
3993
+ addColumn();
3994
+ return result;
3995
+
3996
+ function addFormula() {
3997
+ for (var i = 0; i<formulaDiscriminators.length; i++) {
3998
+ var current = formulaDiscriminators[i].replace('@this',alias);
3999
+ and();
4000
+ result += '(' + current + ')';
4001
+ }
4002
+ }
4003
+
4004
+ function addColumn() {
4005
+ for (var i = 0; i< columnDiscriminators.length; i++) {
4006
+ var current = columnDiscriminators[i].split('=');
4007
+ and();
4008
+ result += alias + '.' + quote(current[0]) + '=' + current[1];
4009
+ }
4010
+ }
4011
+
4012
+ function and() {
4013
+ if(result)
4014
+ result += ' AND ';
4015
+ else
4016
+ result = ' ';
4017
+ }
4018
+ }
4019
+
4020
+ newDiscriminatorSql_1$1 = newDiscriminatorSql;
4021
+ return newDiscriminatorSql_1$1;
4022
+ }
4023
+
4024
+ var newDiscriminatorSql_1;
4025
+ var hasRequiredNewDiscriminatorSql;
4026
+
4027
+ function requireNewDiscriminatorSql () {
4028
+ if (hasRequiredNewDiscriminatorSql) return newDiscriminatorSql_1;
4029
+ hasRequiredNewDiscriminatorSql = 1;
4030
+ var newDiscriminatorSqlCore = requireNewDiscriminatorSql$1();
4031
+
4032
+ function newDiscriminatorSql(context, table, alias) {
4033
+ var result = newDiscriminatorSqlCore(context,table,alias);
4034
+ if (result)
4035
+ return ' AND' + result;
4036
+ return result;
4037
+
4038
+ }
4039
+
4040
+ newDiscriminatorSql_1 = newDiscriminatorSql;
4041
+ return newDiscriminatorSql_1;
4042
+ }
4043
+
4044
+ var newShallowJoinSqlCore;
4045
+ var hasRequiredNewShallowJoinSqlCore;
4046
+
4047
+ function requireNewShallowJoinSqlCore () {
4048
+ if (hasRequiredNewShallowJoinSqlCore) return newShallowJoinSqlCore;
4049
+ hasRequiredNewShallowJoinSqlCore = 1;
4050
+ const newDiscriminatorSql = requireNewDiscriminatorSql();
4051
+ const newParameterized = requireNewParameterized();
4052
+ const getSessionSingleton = requireGetSessionSingleton();
4053
+
4054
+ function _new(context, rightTable, leftColumns, rightColumns, leftAlias, rightAlias, filter) {
4055
+ const quote = getSessionSingleton(context, 'quote');
4056
+ leftAlias = quote(leftAlias);
4057
+ rightAlias = quote(rightAlias);
4058
+ var sql = '';
4059
+ var delimiter = '';
4060
+ for (var i = 0; i < leftColumns.length; i++) {
4061
+ addColumn(i);
4062
+ delimiter = ' AND ';
4063
+ }
4064
+
4065
+ function addColumn(index) {
4066
+ var leftColumn = leftColumns[index];
4067
+ var rightColumn = rightColumns[index];
4068
+ sql += delimiter + leftAlias + '.' + quote(leftColumn._dbName) + '=' + rightAlias + '.' + quote(rightColumn._dbName);
4069
+ }
4070
+
4071
+ sql += newDiscriminatorSql(context, rightTable, rightAlias);
4072
+ var result = newParameterized(sql);
4073
+ if (filter)
4074
+ result = result.append(delimiter).append(filter);
4075
+ return result;
4076
+ }
4077
+
4078
+ newShallowJoinSqlCore = _new;
4079
+ return newShallowJoinSqlCore;
4080
+ }
4081
+
4082
+ var columnAggregateGroup$1;
4083
+ var hasRequiredColumnAggregateGroup$1;
4084
+
4085
+ function requireColumnAggregateGroup$1 () {
4086
+ if (hasRequiredColumnAggregateGroup$1) return columnAggregateGroup$1;
4087
+ hasRequiredColumnAggregateGroup$1 = 1;
4088
+ var getSessionContext = requireGetSessionContext();
4089
+ var newJoinCore = requireNewShallowJoinSqlCore();
4090
+ const getSessionSingleton = requireGetSessionSingleton();
4091
+
4092
+ function columnAggregate(context, operator, column, table, coalesce = true) {
4093
+ const quote = getSessionSingleton(context, 'quote');
4094
+ const rdb = getSessionContext(context);
4095
+ const outerAlias = 'y' + rdb.aggregateCount++;
4096
+ const outerAliasQuoted = quote(outerAlias);
4097
+ const alias = quote('x');
4098
+ const foreignKeys = getForeignKeys(table);
4099
+ const select = ` LEFT JOIN (SELECT ${foreignKeys},${operator}(${alias}.${quote(column._dbName)}) as amount`;
4100
+ const onClause = createOnClause(context, table, outerAlias);
4101
+ const from = ` FROM ${quote(table._dbName)} ${alias} GROUP BY ${foreignKeys}) ${outerAliasQuoted} ON (${onClause})`;
4102
+ const join = select + from;
4103
+
4104
+ return {
4105
+ expression: (alias) => coalesce ? `COALESCE(${outerAliasQuoted}.amount, 0) as ${quote(alias)}` : `${outerAliasQuoted}.amount as ${alias}`,
4106
+ joins: [join]
4107
+ };
4108
+
4109
+ function getForeignKeys(table) {
4110
+ return table._primaryColumns.map(x => `${alias}.${quote(x._dbName)}`).join(',');
4111
+ }
4112
+ }
4113
+
4114
+ function createOnClause(context, table, rightAlias) {
4115
+ let leftAlias = table._rootAlias || table._dbName;
4116
+ const columns = table._primaryColumns;
4117
+ return newJoinCore(context, table, columns, columns, leftAlias, rightAlias).sql();
4118
+ }
4119
+
4120
+
4121
+
4122
+ columnAggregateGroup$1 = columnAggregate;
4123
+ return columnAggregateGroup$1;
4124
+ }
4125
+
3954
4126
  var newColumn;
3955
4127
  var hasRequiredNewColumn;
3956
4128
 
@@ -3966,6 +4138,8 @@ function requireNewColumn () {
3966
4138
  const _in = require_in();
3967
4139
  const _extractAlias = requireExtractAlias();
3968
4140
  const quote = requireQuote$1();
4141
+ const aggregate = requireColumnAggregate$1();
4142
+ const aggregateGroup = requireColumnAggregateGroup$1();
3969
4143
 
3970
4144
  newColumn = function(table, name) {
3971
4145
  var c = {};
@@ -4035,6 +4209,17 @@ function requireNewColumn () {
4035
4209
  c.IN = c.in;
4036
4210
  c.self = self;
4037
4211
 
4212
+ c.groupSum = (context, ...rest) => aggregateGroup.apply(null, [context, 'sum', c, table, ...rest]);
4213
+ c.groupAvg = (context, ...rest) => aggregateGroup.apply(null, [context, 'avg', c, table, ...rest]);
4214
+ c.groupMin = (context, ...rest) => aggregateGroup.apply(null, [context, 'min', c, table, ...rest]);
4215
+ c.groupMax = (context, ...rest) => aggregateGroup.apply(null, [context, 'max', c, table, ...rest]);
4216
+ c.groupCount = (context, ...rest) => aggregateGroup.apply(null, [context, 'count', c, table, false, ...rest]);
4217
+ c.sum = (context, ...rest) => aggregate.apply(null, [context, 'sum', c, table, ...rest]);
4218
+ c.avg = (context, ...rest) => aggregate.apply(null, [context, 'avg', c, table, ...rest]);
4219
+ c.min = (context, ...rest) => aggregate.apply(null, [context, 'min', c, table, ...rest]);
4220
+ c.max = (context, ...rest) => aggregate.apply(null, [context, 'max', c, table, ...rest]);
4221
+ c.count = (context, ...rest) => aggregate.apply(null, [context, 'count', c, table, false, ...rest]);
4222
+
4038
4223
  function self(context) {
4039
4224
  const tableAlias = quote(context,table._rootAlias || table._dbName);
4040
4225
  const columnName = quote(context, c._dbName);
@@ -5670,110 +5855,6 @@ function requireNewColumnSql () {
5670
5855
  return newColumnSql;
5671
5856
  }
5672
5857
 
5673
- var newDiscriminatorSql_1$1;
5674
- var hasRequiredNewDiscriminatorSql$1;
5675
-
5676
- function requireNewDiscriminatorSql$1 () {
5677
- if (hasRequiredNewDiscriminatorSql$1) return newDiscriminatorSql_1$1;
5678
- hasRequiredNewDiscriminatorSql$1 = 1;
5679
- const getSessionSingleton = requireGetSessionSingleton();
5680
-
5681
- function newDiscriminatorSql(context, table, alias) {
5682
- const quote = getSessionSingleton(context, 'quote');
5683
- alias = quote(alias);
5684
- var result = '';
5685
- var formulaDiscriminators = table._formulaDiscriminators;
5686
- var columnDiscriminators = table._columnDiscriminators;
5687
- addFormula();
5688
- addColumn();
5689
- return result;
5690
-
5691
- function addFormula() {
5692
- for (var i = 0; i<formulaDiscriminators.length; i++) {
5693
- var current = formulaDiscriminators[i].replace('@this',alias);
5694
- and();
5695
- result += '(' + current + ')';
5696
- }
5697
- }
5698
-
5699
- function addColumn() {
5700
- for (var i = 0; i< columnDiscriminators.length; i++) {
5701
- var current = columnDiscriminators[i].split('=');
5702
- and();
5703
- result += alias + '.' + quote(current[0]) + '=' + current[1];
5704
- }
5705
- }
5706
-
5707
- function and() {
5708
- if(result)
5709
- result += ' AND ';
5710
- else
5711
- result = ' ';
5712
- }
5713
- }
5714
-
5715
- newDiscriminatorSql_1$1 = newDiscriminatorSql;
5716
- return newDiscriminatorSql_1$1;
5717
- }
5718
-
5719
- var newDiscriminatorSql_1;
5720
- var hasRequiredNewDiscriminatorSql;
5721
-
5722
- function requireNewDiscriminatorSql () {
5723
- if (hasRequiredNewDiscriminatorSql) return newDiscriminatorSql_1;
5724
- hasRequiredNewDiscriminatorSql = 1;
5725
- var newDiscriminatorSqlCore = requireNewDiscriminatorSql$1();
5726
-
5727
- function newDiscriminatorSql(context, table, alias) {
5728
- var result = newDiscriminatorSqlCore(context,table,alias);
5729
- if (result)
5730
- return ' AND' + result;
5731
- return result;
5732
-
5733
- }
5734
-
5735
- newDiscriminatorSql_1 = newDiscriminatorSql;
5736
- return newDiscriminatorSql_1;
5737
- }
5738
-
5739
- var newShallowJoinSqlCore;
5740
- var hasRequiredNewShallowJoinSqlCore;
5741
-
5742
- function requireNewShallowJoinSqlCore () {
5743
- if (hasRequiredNewShallowJoinSqlCore) return newShallowJoinSqlCore;
5744
- hasRequiredNewShallowJoinSqlCore = 1;
5745
- const newDiscriminatorSql = requireNewDiscriminatorSql();
5746
- const newParameterized = requireNewParameterized();
5747
- const getSessionSingleton = requireGetSessionSingleton();
5748
-
5749
- function _new(context, rightTable, leftColumns, rightColumns, leftAlias, rightAlias, filter) {
5750
- const quote = getSessionSingleton(context, 'quote');
5751
- leftAlias = quote(leftAlias);
5752
- rightAlias = quote(rightAlias);
5753
- var sql = '';
5754
- var delimiter = '';
5755
- for (var i = 0; i < leftColumns.length; i++) {
5756
- addColumn(i);
5757
- delimiter = ' AND ';
5758
- }
5759
-
5760
- function addColumn(index) {
5761
- var leftColumn = leftColumns[index];
5762
- var rightColumn = rightColumns[index];
5763
- sql += delimiter + leftAlias + '.' + quote(leftColumn._dbName) + '=' + rightAlias + '.' + quote(rightColumn._dbName);
5764
- }
5765
-
5766
- sql += newDiscriminatorSql(context, rightTable, rightAlias);
5767
- var result = newParameterized(sql);
5768
- if (filter)
5769
- result = result.append(delimiter).append(filter);
5770
- return result;
5771
- }
5772
-
5773
- newShallowJoinSqlCore = _new;
5774
- return newShallowJoinSqlCore;
5775
- }
5776
-
5777
5858
  var newShallowJoinSql;
5778
5859
  var hasRequiredNewShallowJoinSql;
5779
5860
 
@@ -9193,7 +9274,7 @@ function requireColumnAggregate () {
9193
9274
  const columnName = quote(column._dbName);
9194
9275
 
9195
9276
  return {
9196
- expression: (alias) => coalesce ? `COALESCE(${operator}(${tableAlias}.${columnName}), 0) as ${quote(alias)}` : `${operator}(${tableAlias}.${columnName}) as ${alias}`,
9277
+ expression: (alias) => coalesce ? `COALESCE(${operator}(${tableAlias}.${columnName}), 0) as ${quote(alias)}` : `${operator}(${tableAlias}.${columnName}) as ${quote(alias)}`,
9197
9278
 
9198
9279
  joins: newJoinArray(context, relations)
9199
9280
  };
package/src/map.d.ts CHANGED
@@ -664,23 +664,13 @@ type RelatedColumns<T> = RemoveNeverFlat<{
664
664
  : never;
665
665
  }>;
666
666
 
667
-
668
667
  type AggregateColumns<T> = RemoveNeverFlat<{
669
- [K in keyof T]:
670
- T[K] extends ManyRelation
671
- ? AggregateColumns2<T[K]>
672
- : T[K] extends RelatedTable
673
- ? AggregateColumns2<T[K]>
674
- : never;
675
- }>;
676
-
677
- type AggregateColumns2<T> = RemoveNeverFlat<{
678
668
  [K in keyof T]:
679
669
  T[K] extends NumericColumnTypeDef<infer M> ? NumericColumnSymbol
680
670
  : T[K] extends ManyRelation
681
- ? AggregateColumns2<T[K]>
671
+ ? AggregateColumns<T[K]>
682
672
  : T[K] extends RelatedTable
683
- ? AggregateColumns2<T[K]>
673
+ ? AggregateColumns<T[K]>
684
674
  : never;
685
675
  }>;
686
676
 
@@ -0,0 +1,15 @@
1
+ const getSessionSingleton = require('../getSessionSingleton');
2
+
3
+ function columnAggregate(context, operator, column, table, coalesce = true) {
4
+ const quote = getSessionSingleton(context, 'quote');
5
+
6
+ const tableAlias = quote(table._rootAlias || table._dbName);
7
+ const columnName = quote(column._dbName);
8
+
9
+ return {
10
+ expression: (alias) => coalesce ? `COALESCE(${operator}(${tableAlias}.${columnName}), 0) as ${quote(alias)}` : `${operator}(${tableAlias}.${columnName}) as ${quote(alias)}`,
11
+ joins: ['']
12
+ };
13
+ }
14
+
15
+ module.exports = columnAggregate;
@@ -0,0 +1,35 @@
1
+ var getSessionContext = require('../getSessionContext');
2
+ var newJoinCore = require('../query/singleQuery/joinSql/newShallowJoinSqlCore');
3
+ const getSessionSingleton = require('../getSessionSingleton');
4
+
5
+ function columnAggregate(context, operator, column, table, coalesce = true) {
6
+ const quote = getSessionSingleton(context, 'quote');
7
+ const rdb = getSessionContext(context);
8
+ const outerAlias = 'y' + rdb.aggregateCount++;
9
+ const outerAliasQuoted = quote(outerAlias);
10
+ const alias = quote('x');
11
+ const foreignKeys = getForeignKeys(table);
12
+ const select = ` LEFT JOIN (SELECT ${foreignKeys},${operator}(${alias}.${quote(column._dbName)}) as amount`;
13
+ const onClause = createOnClause(context, table, outerAlias);
14
+ const from = ` FROM ${quote(table._dbName)} ${alias} GROUP BY ${foreignKeys}) ${outerAliasQuoted} ON (${onClause})`;
15
+ const join = select + from;
16
+
17
+ return {
18
+ expression: (alias) => coalesce ? `COALESCE(${outerAliasQuoted}.amount, 0) as ${quote(alias)}` : `${outerAliasQuoted}.amount as ${alias}`,
19
+ joins: [join]
20
+ };
21
+
22
+ function getForeignKeys(table) {
23
+ return table._primaryColumns.map(x => `${alias}.${quote(x._dbName)}`).join(',');
24
+ }
25
+ }
26
+
27
+ function createOnClause(context, table, rightAlias) {
28
+ let leftAlias = table._rootAlias || table._dbName;
29
+ const columns = table._primaryColumns;
30
+ return newJoinCore(context, table, columns, columns, leftAlias, rightAlias).sql();
31
+ }
32
+
33
+
34
+
35
+ module.exports = columnAggregate;
@@ -7,6 +7,8 @@ const greaterThanOrEqual = require('./greaterThanOrEqual');
7
7
  const _in = require('./in');
8
8
  const _extractAlias = require('./extractAlias');
9
9
  const quote = require('../../table/quote');
10
+ const aggregate = require('./columnAggregate');
11
+ const aggregateGroup = require('./columnAggregateGroup');
10
12
 
11
13
  module.exports = function(table, name) {
12
14
  var c = {};
@@ -76,6 +78,17 @@ module.exports = function(table, name) {
76
78
  c.IN = c.in;
77
79
  c.self = self;
78
80
 
81
+ c.groupSum = (context, ...rest) => aggregateGroup.apply(null, [context, 'sum', c, table, ...rest]);
82
+ c.groupAvg = (context, ...rest) => aggregateGroup.apply(null, [context, 'avg', c, table, ...rest]);
83
+ c.groupMin = (context, ...rest) => aggregateGroup.apply(null, [context, 'min', c, table, ...rest]);
84
+ c.groupMax = (context, ...rest) => aggregateGroup.apply(null, [context, 'max', c, table, ...rest]);
85
+ c.groupCount = (context, ...rest) => aggregateGroup.apply(null, [context, 'count', c, table, false, ...rest]);
86
+ c.sum = (context, ...rest) => aggregate.apply(null, [context, 'sum', c, table, ...rest]);
87
+ c.avg = (context, ...rest) => aggregate.apply(null, [context, 'avg', c, table, ...rest]);
88
+ c.min = (context, ...rest) => aggregate.apply(null, [context, 'min', c, table, ...rest]);
89
+ c.max = (context, ...rest) => aggregate.apply(null, [context, 'max', c, table, ...rest]);
90
+ c.count = (context, ...rest) => aggregate.apply(null, [context, 'count', c, table, false, ...rest]);
91
+
79
92
  function self(context) {
80
93
  const tableAlias = quote(context,table._rootAlias || table._dbName);
81
94
  const columnName = quote(context, c._dbName);
@@ -11,7 +11,7 @@ function columnAggregate(context, operator, column, relations, coalesce = true)
11
11
  const columnName = quote(column._dbName);
12
12
 
13
13
  return {
14
- expression: (alias) => coalesce ? `COALESCE(${operator}(${tableAlias}.${columnName}), 0) as ${quote(alias)}` : `${operator}(${tableAlias}.${columnName}) as ${alias}`,
14
+ expression: (alias) => coalesce ? `COALESCE(${operator}(${tableAlias}.${columnName}), 0) as ${quote(alias)}` : `${operator}(${tableAlias}.${columnName}) as ${quote(alias)}`,
15
15
 
16
16
  joins: newJoinArray(context, relations)
17
17
  };