UNPKG

@mojojs/sql

Version:
75 lines 2.37 kB
/** * SQL statement class. */ export class Statement { constructor(parts, values) { this.parts = []; this.values = []; const mergedParts = this.parts; const mergedValues = this.values; let mergeNext = false; for (let i = 0; i < parts.length; i++) { if (mergeNext === true) { const index = mergedParts.length - 1; mergedParts[index] = mergedParts[index] + parts[i]; mergeNext = false; } else { mergedParts.push(parts[i]); } if (parts[i + 1] === undefined) continue; const value = values[i]; if (value instanceof Statement) { const valueParts = value.parts; const index = mergedParts.length - 1; mergedParts[index] = mergedParts[index] + valueParts[0]; mergedParts.push(...valueParts.slice(1)); mergedValues.push(...value.values); mergeNext = true; } else { mergedValues.push(values[i]); } } } /** * Create new SQL query or partial query. */ static sql(parts, ...values) { return new Statement(parts, values); } /** * Create new SQL query or partial query without safe placeholders. */ static sqlUnsafe(parts, ...values) { const merged = []; for (let i = 0; i < parts.length; i++) { merged.push(parts[i]); if (values[i] !== undefined) merged.push(values[i]); } return new Statement([merged.join('')], []); } /** * Convert SQL statement to query with placeholders. */ toQuery(options) { return { text: this.toString(options), values: this.values }; } /** * Convert SQL statement to string. */ toString(options = {}) { const query = []; const placeholder = options.placeholder; const parts = this.parts; for (let i = 1; i <= parts.length; i++) { query.push(parts[i - 1]); if (parts[i] !== undefined) query.push(placeholder === undefined ? `$${i}` : placeholder); } return query.join(''); } } //# sourceMappingURL=statement.js.map