Skip to content

complex boolean column expressions must be wrapped in case … when … then …  #1007

@patricebender

Description

@patricebender

Detailed steps to reproduce

> q = cds.ql`SELECT from ${Books} { (stock>0 or stock = 0) as stockNotEmpty }`
cds.ql {
  SELECT: {
    from: { ref: [ 'sap.capire.bookshop.Books' ] },
    columns: [
      {
        xpr: [
          { ref: [ 'stock' ] },
          '>',
          { val: 0 },
          'or',
          { ref: [ 'stock' ] },
          '=',
          { val: 0 }
        ],
        as: 'stockNotEmpty'
      }
    ]
  }
}
> await q
Uncaught:
[SqlError: sql syntax error: incorrect syntax near "(": line 1 col 107 (at pos 107)] {
  code: 257,
  sqlState: 'HY000',
  level: 1,
  position: 0,
  query: `WITH Books as (SELECT  (CASE WHEN Books.stock > ? THEN true WHEN NOT Books.stock > ? THEN false END)  or  (CASE WHEN Books.stock = ? THEN true WHEN NOT Books.stock = ? THEN false END)  as "stockNotEmpty" FROM sap_capire_bookshop_Books as Books) SELECT '$[' as "_path_",'{}' as "_blobs_",'{}' as "_expands_",(SELECT "stockNotEmpty" FROM JSON_TABLE('{}', '$' COLUMNS("'$$FaKeDuMmYCoLuMn$$'" FOR ORDINALITY)) FOR JSON ('format'='no', 'omitnull'='no', 'arraywrap'='no') RETURNS NVARCHAR(2147483647)) as "_json_" FROM Books`
}
WITH Books AS (
    SELECT 
        (CASE 
            WHEN Books.stock > ? THEN true 
            WHEN NOT Books.stock > ? THEN false 
         END) OR 
        (CASE 
            WHEN Books.stock = ? THEN true 
            WHEN NOT Books.stock = ? THEN false 
         END) AS "stockNotEmpty" # parentheses missing?
    FROM sap_capire_bookshop_Books AS Books
) 
SELECT 
    '$[' AS "_path_",
    '{}' AS "_blobs_",
    '{}' AS "_expands_",
    (
        SELECT "stockNotEmpty" 
        FROM JSON_TABLE('{}', '$' COLUMNS("'$$FaKeDuMmYCoLuMn$$'" FOR ORDINALITY)) 
        FOR JSON ('format'='no', 'omitnull'='no', 'arraywrap'='no') 
        RETURNS NVARCHAR(2147483647)
    ) AS "_json_" 
FROM Books

Details about your project

@capire/bookshop
@cap-js/asyncapi 1.0.2
@cap-js/cds-types 0.9.0
@cap-js/db-service 1.17.0
@cap-js/hana 1.6.0
@cap-js/openapi 1.1.2
@cap-js/sqlite 1.8.0
@sap/cds 8.8.0
@sap/cds-compiler 5.7.1
@sap/cds-dk 8.7.0
@sap/cds-fiori 1.3.0
@sap/cds-foss 5.0.1
@sap/cds-mtxs 2.5.0
@sap/eslint-plugin-cds 3.1.2
Node.js v20.11.0

Run cds v -i in your project root to generate this

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions