This commit is contained in:
Daniel
2023-03-16 19:58:31 +01:00
parent 3d7e9a8ea3
commit 72be4a28a6
2 changed files with 11 additions and 48 deletions

2
.gitignore vendored
View File

@@ -20,3 +20,5 @@ reviews/db/test.db
*.openapi3.json *.openapi3.json
*.sqlite *.sqlite
*.db *.db
**/@types

View File

@@ -2,11 +2,10 @@ describe('cds.ql → cqn', () => {
const cds = require('@sap/cds/lib') const cds = require('@sap/cds/lib')
const { expect } = cds.test const { expect } = cds.test
const { cdr } = cds.ql
const Foo = { name: 'Foo' } const Foo = { name: 'Foo' }
const Books = { name: 'capire.bookshop.Books' } const Books = { name: 'capire.bookshop.Books' }
const STAR = cdr ? '*' : { ref: ['*'] } const STAR = '*'
const skip = {to:{eql:()=>skip}} const skip = {to:{eql:()=>skip}}
const srv = new cds.Service const srv = new cds.Service
let cqn let cqn
@@ -185,7 +184,7 @@ describe('cds.ql → cqn', () => {
}}, }},
}) })
if (cdr) expect.plain (cqn) expect.plain (cqn)
.to.eql(SELECT`Foo[ID=${11}]`) .to.eql(SELECT`Foo[ID=${11}]`)
.to.eql(srv.read`Foo[ID=${11}]`) .to.eql(srv.read`Foo[ID=${11}]`)
@@ -242,7 +241,7 @@ describe('cds.ql → cqn', () => {
}, },
}) })
cdr && expect.plain(cqn) expect.plain(cqn)
.to.eql(CQL`SELECT *,a,b as c from Foo`) .to.eql(CQL`SELECT *,a,b as c from Foo`)
.to.eql(CQL`SELECT from Foo {*,a,b as c}`) .to.eql(CQL`SELECT from Foo {*,a,b as c}`)
@@ -341,7 +340,7 @@ describe('cds.ql → cqn', () => {
expect(SELECT.from(Foo).where({ x: 1, and: { y: 2, or: { z: 3 } } })).to.eql({ expect(SELECT.from(Foo).where({ x: 1, and: { y: 2, or: { z: 3 } } })).to.eql({
SELECT: { SELECT: {
from: { ref: ['Foo'] }, from: { ref: ['Foo'] },
where: cdr ? [ where: [
{ ref: ['x'] }, { ref: ['x'] },
'=', '=',
{ val: 1 }, { val: 1 },
@@ -357,29 +356,12 @@ describe('cds.ql → cqn', () => {
{ val: 3 }, { val: 3 },
]}, ]},
// ')', // ')',
] : [
{ ref: ['x'] },
'=',
{ val: 1 },
'and',
'(',
// {xpr:[
{ ref: ['y'] },
'=',
{ val: 2 },
'or',
{ ref: ['z'] },
'=',
{ val: 3 },
// ]},
')',
], ],
}, },
}) })
}) })
test ("where x='*'", ()=>{ test ("where x='*'", ()=>{
if (cdr)
expect (SELECT.from(Foo).where({x:'*'})) expect (SELECT.from(Foo).where({x:'*'}))
.to.eql(SELECT.from(Foo).where("x='*'")) .to.eql(SELECT.from(Foo).where("x='*'"))
.to.eql(SELECT.from(Foo).where("x=",'*')) .to.eql(SELECT.from(Foo).where("x=",'*'))
@@ -387,7 +369,6 @@ describe('cds.ql → cqn', () => {
.to.eql( .to.eql(
CQL`SELECT from Foo where x='*'` CQL`SELECT from Foo where x='*'`
) )
if (cdr)
expect (SELECT.from(Foo).where({x:['*',1]})) expect (SELECT.from(Foo).where({x:['*',1]}))
.to.eql(SELECT.from(Foo).where("x in ('*',1)")) .to.eql(SELECT.from(Foo).where("x in ('*',1)"))
.to.eql(SELECT.from(Foo).where("x in",['*',1])) .to.eql(SELECT.from(Foo).where("x in",['*',1]))
@@ -479,19 +460,19 @@ describe('cds.ql → cqn', () => {
CQL`SELECT from Foo where x=1 and y=2 or z=3` CQL`SELECT from Foo where x=1 and y=2 or z=3`
) )
if (cdr) expect ( expect (
SELECT.from(Foo).where({x:1}).and({y:2,or:{z:3}}) SELECT.from(Foo).where({x:1}).and({y:2,or:{z:3}})
).to.eql ( ).to.eql (
CQL`SELECT from Foo where x=1 and ( y=2 or z=3 )` CQL`SELECT from Foo where x=1 and ( y=2 or z=3 )`
) )
if (cdr) expect ( expect (
SELECT.from(Foo).where({1:1}).and({x:1,or:{x:2}}).and({y:2,or:{z:3}}) SELECT.from(Foo).where({1:1}).and({x:1,or:{x:2}}).and({y:2,or:{z:3}})
).to.eql ( ).to.eql (
CQL`SELECT from Foo where 1=1 and ( x=1 or x=2 ) and ( y=2 or z=3 )` CQL`SELECT from Foo where 1=1 and ( x=1 or x=2 ) and ( y=2 or z=3 )`
) )
if (cdr) expect ( expect (
SELECT.from(Foo).where({x:1,or:{x:2}}).and({y:2,or:{z:3}}) SELECT.from(Foo).where({x:1,or:{x:2}}).and({y:2,or:{z:3}})
).to.eql ( ).to.eql (
CQL`SELECT from Foo where ( x=1 or x=2 ) and ( y=2 or z=3 )` CQL`SELECT from Foo where ( x=1 or x=2 ) and ( y=2 or z=3 )`
@@ -499,7 +480,7 @@ describe('cds.ql → cqn', () => {
}) })
test('where ({x:[undefined]})', () => { test('where ({x:[undefined]})', () => {
if (cdr) expect ( expect (
SELECT.from(Foo).where({x:[undefined]}) SELECT.from(Foo).where({x:[undefined]})
).to.eql ({ SELECT: { ).to.eql ({ SELECT: {
from: {ref:['Foo']}, from: {ref:['Foo']},
@@ -526,7 +507,7 @@ describe('cds.ql → cqn', () => {
).to.eql({ ).to.eql({
SELECT: { SELECT: {
from: { ref: ['Foo'] }, from: { ref: ['Foo'] },
where: cdr ? [ where: [
{ ref: ['ID'] }, { ref: ['ID'] },
'=', '=',
{ val: ID }, { val: ID },
@@ -546,24 +527,6 @@ describe('cds.ql → cqn', () => {
{ val: 9 }, { val: 9 },
] ]
}, },
] : [
{ ref: ['ID'] },
'=',
{ val: ID },
'and',
{ ref: ['args'] },
'in',
{ list: args.map(val => ({ val })) },
'and',
'(',
{ ref: ['x'] },
'like',
{ val: '%x%' },
'or',
{ ref: ['y'] },
'>=',
{ val: 9 },
')',
], ],
} }
}) })
@@ -657,7 +620,6 @@ describe('cds.ql → cqn', () => {
}) })
it('should consistently handle *', () => { it('should consistently handle *', () => {
if (!cdr) return
expect({ expect({
SELECT: { from: { ref: ['Foo'] }, columns: ['*'] }, SELECT: { from: { ref: ['Foo'] }, columns: ['*'] },
}) })
@@ -668,7 +630,6 @@ describe('cds.ql → cqn', () => {
}) })
it('should consistently handle lists', () => { it('should consistently handle lists', () => {
if (!cdr) return
const ID = 11, args = [{ref:['foo']}, "bar", 3] const ID = 11, args = [{ref:['foo']}, "bar", 3]
const cqn = CQL`SELECT from Foo where ID=11 and x in (foo,'bar',3)` const cqn = CQL`SELECT from Foo where ID=11 and x in (foo,'bar',3)`
expect(SELECT.from(Foo).where`ID=${ID} and x in ${args}`).to.eql(cqn) expect(SELECT.from(Foo).where`ID=${ID} and x in ${args}`).to.eql(cqn)