UNPKG

typecql

Version:

ORM for CQL databases.

86 lines 3.99 kB
"use strict"; 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