@vulcan-sql/extension-driver-ksqldb
Version:
ksqlDB driver for VulcanSQL
49 lines • 1.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertSchemaToColumns = exports.buildSQL = exports.isNoOP = exports.addLimit = exports.removeEndingSemiColon = void 0;
const lodash_1 = require("lodash");
const isNullOrUndefine = (value) => (0, lodash_1.isUndefined)(value) || (0, lodash_1.isNull)(value);
const removeEndingSemiColon = (sql) => {
return sql.replace(/;([ \n]+)?$/, '');
};
exports.removeEndingSemiColon = removeEndingSemiColon;
const addLimit = (sql, limit) => {
if (isNullOrUndefine(limit))
return sql;
return [sql, `LIMIT`, limit].join(' ');
};
exports.addLimit = addLimit;
// Check if there is no operations
const isNoOP = (operations) => {
if (!isNullOrUndefine(operations.limit))
return false;
if (!isNullOrUndefine(operations.offset))
return false;
return true;
};
exports.isNoOP = isNoOP;
const buildSQL = (sql, operations) => {
if ((0, exports.isNoOP)(operations))
return sql;
let builtSQL = '';
// ksqlDB currently does not support subquery
// OFFSET is not supported, LIMIT syntax is supported >= ksqldb 0.24.0
// https://github.com/confluentinc/ksql/issues/745
builtSQL += (0, exports.removeEndingSemiColon)(sql);
builtSQL = (0, exports.addLimit)(builtSQL, operations.limit);
builtSQL += ';';
return builtSQL;
};
exports.buildSQL = buildSQL;
const convertSchemaToColumns = (schema) => {
// schema example: "`PROFILEID` STRING, `LATITUDE` DOUBLE, `LONGITUDE` DOUBLE"
return schema
.replace(/`/g, '')
.split(', ')
.map((columnString) => {
const [name, type] = columnString.split(' ');
return { name: (0, lodash_1.startCase)((0, lodash_1.lowerCase)(name)), type };
});
};
exports.convertSchemaToColumns = convertSchemaToColumns;
//# sourceMappingURL=sqlBuilder.js.map