Skip to content

Commit 9fc296c

Browse files
Fix toMQL() scientific notation, falsy value bugs, and missing implementations (#4908)
* fix(mlang): prevent scientific notation and falsy value bugs in toMQL output * fix(mlang): wrap multi-arg Or.toMQL output in parentheses
1 parent 2757994 commit 9fc296c

File tree

16 files changed

+295
-19
lines changed

16 files changed

+295
-19
lines changed

src/foam/mlang/Constant.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,17 @@ foam.CLASS({
7474

7575
if ( foam.String.isInstance(this.value) )
7676
return '\"' + this.value + '\"';
77+
78+
if ( typeof this.value === 'number' && ! Number.isInteger(this.value) && isFinite(this.value) ) {
79+
var s = this.value.toFixed(20);
80+
s = s.replace(/0+$/, '');
81+
if ( s.endsWith('.') ) s += '0';
82+
return s;
83+
}
84+
85+
if ( typeof this.value === 'boolean' )
86+
return this.value ? 'true' : 'false';
87+
7788
return this.value;
7889
}
7990
]

src/foam/mlang/expr/Dot.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ foam.CLASS({
3333
{
3434
class: 'foam.mlang.ExprProperty',
3535
name: 'arg2'
36+
},
37+
{
38+
name: 'name',
39+
transient: true,
40+
flags: ['js'],
41+
getter: function() {
42+
return this.arg2.name;
43+
}
3644
}
3745
],
3846

src/foam/mlang/predicate/ContainsIC.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ return ( s1 instanceof String && ((String) s1).toUpperCase().contains(s2) );`
4444

4545
function toMQL() {
4646
var arg2 = this.arg2ToMQL();
47-
if ( ! arg2 )
48-
return null;
47+
if ( arg2 == null ) return null;
4948
return this.arg1.name + ':' + arg2;
5049
}
5150

src/foam/mlang/predicate/Eq.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ return FOAM_utils.equals(v1, v2)
5151

5252
function toMQL() {
5353
var arg2 = this.arg2ToMQL();
54-
if ( ! arg2 )
55-
return null;
54+
if ( arg2 == null ) return null;
5655
return this.arg1.name + '=' + arg2;
5756
}
5857
]

src/foam/mlang/predicate/Gt.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ foam.CLASS({
2626
},
2727
function toMQL() {
2828
var arg2 = this.arg2ToMQL();
29-
if ( ! arg2 )
30-
return null;
29+
if ( arg2 == null ) return null;
3130
return this.arg1.name + '>' + arg2;
3231
}
3332
]

src/foam/mlang/predicate/Gte.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ foam.CLASS({
2626
},
2727
function toMQL() {
2828
var arg2 = this.arg2ToMQL();
29-
if ( ! arg2 )
30-
return null;
29+
if ( arg2 == null ) return null;
3130
return this.arg1.name + '>=' + arg2;
3231
}
3332
]

src/foam/mlang/predicate/Has.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ foam.CLASS({
5555
name: 'createStatement',
5656
// TODO: check for empty array
5757
javaCode: `return " (" + getArg1().createStatement() + " <> '') is not true ";`
58+
},
59+
function toMQL() {
60+
return this.arg1.name + ' IS NOT EMPTY';
5861
}
5962
]
6063
});

src/foam/mlang/predicate/In.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,9 @@ return false
164164
},
165165
function toMQL() {
166166
var arg2 = this.arg2ToMQL();
167-
if ( ! arg2 )
168-
return null;
169-
return this.arg1.name + ':' + arg2.join(',');
167+
if ( arg2 == null ) return null;
168+
if ( Array.isArray(arg2) ) return this.arg1.name + ':' + arg2.join(',');
169+
return this.arg1.name + ':' + arg2;
170170
}
171171
]
172172
});

src/foam/mlang/predicate/Lt.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ foam.CLASS({
2626
},
2727
function toMQL() {
2828
var arg2 = this.arg2ToMQL();
29-
if ( ! arg2 )
30-
return null;
29+
if ( arg2 == null ) return null;
3130
return this.arg1.name + '<' + arg2;
3231
}
3332
]

src/foam/mlang/predicate/Lte.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ foam.CLASS({
2626
},
2727
function toMQL() {
2828
var arg2 = this.arg2ToMQL();
29-
if ( ! arg2 )
30-
return null;
29+
if ( arg2 == null ) return null;
3130
return this.arg1.name + '<=' + arg2;
3231
}
3332
]

0 commit comments

Comments
 (0)