UNPKG

@sap/cds

Version:

SAP Cloud Application Programming Model - CDS for Node.js

74 lines (66 loc) 2.58 kB
const cds = require ('../..') const cdsc = require ('../cdsc') const sqliteKeywords = cdsc.to.sql.sqlite.keywords const postgresKeywords = cdsc.to.sql.postgres?.keywords // requires @sap/cds-compiler >= 4.8.0 const { unfold_ddl } = require ('../etc/_localized') const TRACE = cds.debug('trace') function cds_compile_to_sql (csn,_o) { TRACE?.time('cds.compile 2sql'.padEnd(22)) try { let result, next = ()=> result ??= function (){ csn = cds.minify(csn) const o = cdsc._options.for.sql(_o) //> used twice below... const all = cdsc.to.sql(csn,o) .map (each => each.replace(/^-- .+\n/,'')) //> strip comments const sql = unfold_ddl(all, csn, o) if (o.as === 'str') return `\n${sql.join('\n\n')}\n` return sql }() cds.emit ('compile.to.dbx', csn, _o, next) return result ??= next() //> in case no handler called next } finally { TRACE?.timeEnd('cds.compile 2sql'.padEnd(22)) } } function cds_compile_to_hdbtable (csn,o) { const all = cdsc.to.hdi (cds.minify(csn),o) return _2many(all) } function cds_compile_to_hana(csn, o, beforeCsn) { return require('./hana')(cds.minify(csn), o, beforeCsn) } function cds_compile_to_deltaSql (csn, o, beforeCsn) { let result, next = ()=> result ??= function (){ const options = cdsc._options.for.sql(o) if (typeof beforeCsn === 'string') beforeCsn = JSON.parse(beforeCsn) const { afterImage, drops, createsAndAlters } = cdsc.to.deltaSql (csn, options, beforeCsn || {definitions: {}, $version: '2.0'} ); // FIXME: As default value in compiler API? return { afterImage, drops: unfold_ddl(drops, csn, options), createsAndAlters: unfold_ddl(createsAndAlters, csn, options) }; }() cds.emit ('compile.to.dbx', csn, o, next) return result ??= next() //> in case no handler called next } function cds_compile_to_hdbcds (csn,o) { const all = cdsc.to.hdbcds (cds.minify(csn),o) const constructFileName = (fileName) => { const identifier = fileName.split('.'); const suffix = identifier.pop(); return identifier.join('_').concat(`.${suffix}`); } return _2many(all, constructFileName); } function* _2many (all,_file=f=>f) { for (let file in all) yield [ all[file].replace(/^(\/\/|--) generated by .+\n/,''), { file:_file(file) } ] } module.exports = Object.assign (cds_compile_to_sql, { hdbcds: cds_compile_to_hdbcds, hdbtable: cds_compile_to_hdbtable, hana: cds_compile_to_hana, delta: cds_compile_to_deltaSql, sqlite: { keywords: sqliteKeywords }, postgres: { keywords: postgresKeywords }, })