UNPKG

msnodesqlv8

Version:

Microsoft Driver for Node.js SQL Server compatible with all versions of Node.

51 lines (47 loc) 1.76 kB
class SchemaSplitter { stripEscape (columnName) { const columnParts = columnName.split(/\.(?![^[]*])/g) const qualified = columnParts[columnParts.length - 1] const columnNameRegexp = /\[?(.*?)]?$/g const match = columnNameRegexp.exec(qualified) const trim = match.filter(r => r !== '') return trim[trim.length - 1] } strip (name) { return name.replace(/^\[|]$/g, '').replace(/]]/g, ']') } substitute (sql, decomp) { // removes brackets at start end, change ']]' to ']' sql = sql.replace(/<table_name>/g, this.strip(decomp.table)) // removes brackets at start end, change ']]' to ']' .replace(/<table_schema>/g, this.strip(decomp.schema)) // use the escaped table name for the OBJECT_ID() function .replace(/<escaped_table_name>/g, decomp.fullTableName) // use the escaped table name for the OBJECT_ID() function .replace(/<table_catalog>/g, decomp.cat) return sql } decomposeSchema (qualifiedName, cat) { cat = cat || '' // Split table names like 'dbo.table1' to: ['dbo', 'table1'] and 'table1' to: ['table1'] const tableParts = qualifiedName.split(/\.(?![^[]*])/g) const table = tableParts[tableParts.length - 1] // get the table name let fullTableName = table // get the table schema, if missing set schema to '' const schema = tableParts.length >= 2 ? tableParts[tableParts.length - 2] || '' : '' if (tableParts.length > 2) { cat = tableParts[tableParts.length - 3] } else if (table[0] === '#') { cat = '[tempdb]' fullTableName = `${cat}.${schema}.${table}` } return { qualifiedName, fullTableName, cat, schema, table } } } exports.SchemaSplitter = SchemaSplitter