typecql
Version:
ORM for CQL databases.
86 lines • 3.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createTableBuilder = createTableBuilder;
const EntitiesData_1 = require("../../misc/utils/EntitiesData");
const typecql_decorator_functions_1 = require("../../meta/typecql.decorator.functions");
const formatKeysWithSettings_1 = require("../../misc/functions/formating/formatKeysWithSettings");
const checkAndReplaceToQuoted_1 = require("../../misc/functions/formating/checkAndReplaceToQuoted");
async function createTableBuilder(tableName, settings) {
const entity = EntitiesData_1.default.classEntities[tableName];
const columns = (0, typecql_decorator_functions_1.getColumns)(tableName);
const tableOptions = (0, typecql_decorator_functions_1.getTableOptions)(entity);
const columnQueries = [];
let addClustering = '';
const primaries = Array.isArray(tableOptions?.primaryKeys)
? tableOptions?.primaryKeys
: [];
const clusterings = Array.isArray(tableOptions?.clusteringKeys)
? tableOptions?.clusteringKeys
: [];
for (const [key, column] of Object.entries(columns)) {
if (key?.startsWith('incode')) {
continue;
}
if (column?.['field'] && column?.['type']) {
columnQueries.push(`\n${(0, formatKeysWithSettings_1.formatKeysWithSettings)({
key,
forQuery: true,
tableName,
connSettings: settings,
})} ${column?.['type']}`);
}
if (column?.['isPrimary'] &&
column?.['primaryKind'] &&
column?.['type'] &&
!tableOptions?.primaryKeys?.length) {
column?.['primaryKind'] === 'partition'
? primaries.push((0, formatKeysWithSettings_1.formatKeysWithSettings)({
key,
forQuery: true,
tableName,
connSettings: settings,
}))
: clusterings.push((0, formatKeysWithSettings_1.formatKeysWithSettings)({
key,
forQuery: true,
tableName,
connSettings: settings,
}));
}
}
if (tableOptions?.primaryKeys?.length) {
const primariesQuery = [];
const clusteringQueries = [];
for (const primary of primaries) {
primariesQuery.push((0, checkAndReplaceToQuoted_1.checkAndReplaceToQuoted)(primary));
}
for (const clustering of clusterings) {
clusteringQueries.push((0, checkAndReplaceToQuoted_1.checkAndReplaceToQuoted)(clustering));
}
addClustering = `PRIMARY KEY ((${primariesQuery.join(', ')})${clusteringQueries.length ? ', ' + clusteringQueries.join(', ') : ''})`;
}
else if (primaries.length) {
const primariesQuery = [];
const clusteringQueries = [];
for (const primary of primaries) {
primariesQuery.push((0, checkAndReplaceToQuoted_1.checkAndReplaceToQuoted)(primary));
}
for (const clustering of clusterings) {
clusteringQueries.push((0, checkAndReplaceToQuoted_1.checkAndReplaceToQuoted)(clustering));
}
addClustering = `PRIMARY KEY ((${primariesQuery.join(', ')})${clusteringQueries.length ? ', ' + clusteringQueries.join(', ') : ''})`;
}
let query = `CREATE TABLE IF NOT EXISTS "${tableName}" (${columnQueries.join(',')}${addClustering.length ? `, \n${addClustering}` : ''})`;
if (tableOptions?.ordering?.length) {
query += ' WITH CLUSTERING ORDER BY (';
query += tableOptions?.ordering
.map((item) => `${(0, checkAndReplaceToQuoted_1.checkAndReplaceToQuoted)(item.key)} ${item.direction}`)
.join(', ');
query += ')';
if (tableOptions?.additionalQuery) {
query += ` ${tableOptions.additionalQuery} `;
}
}
return query;
}
//# sourceMappingURL=createTableBuilder.js.map