The precompile module provides the compileToJS function to compile SQL queries into JavaScript code that skips SQL parsing on repeated executions.
npm install alasqlImport the precompile module separately to keep it out of your main bundle:
const alasql = require('alasql');
const { compileToJS } = require('alasql/precompile');Or with ES modules:
import alasql from 'alasql';
import { compileToJS } from 'alasql/precompile';Compiles an SQL statement into JavaScript source code that skips SQL parsing.
Parameters:
sql(string): The SQL statement to compiledatabaseid(string, optional): Database identifier
Returns: String containing the generated JavaScript function
Example:
const { compileToJS } = require('alasql/precompile');
// Compile the SQL once
const sql = 'SELECT product, price FROM ? WHERE price > ?';
const jsCode = compileToJS(sql);
// Create the compiled function
const compiledFn = new Function('return ' + jsCode)().bind(alasql);
// Execute many times - NO SQL parsing!
const data = [{product: 'Book', price: 5}, {product: 'Pen', price: 1}];
const result1 = compiledFn([data, 2]);
const result2 = compiledFn([data, 3]);When you need to execute the same SQL query thousands of times:
const { compileToJS } = require('alasql/precompile');
// Compile once
const jsCode = compileToJS('SELECT * FROM ? WHERE active = true');
const compiledFn = new Function('return ' + jsCode)().bind(alasql);
// Execute many times (no parsing overhead!)
for (let i = 0; i < 10000; i++) {
const result = compiledFn([users]);
// process result...
}Generate optimized query functions at build time:
const { compileToJS } = require('alasql/precompile');
const fs = require('fs');
const sql = 'SELECT product, price*100 AS cents FROM products WHERE price > 2';
const jsCode = compileToJS(sql);
// Save to file
fs.writeFileSync('queries/getProducts.js', `
const alasql = require('alasql');
module.exports = ${jsCode}.bind(alasql);
`);Keep precompile functionality separate from your main bundle:
// In your build tool, only import precompile during build
import { compileToJS } from 'alasql/precompile';
// Main app only needs alasql, not precompile
import alasql from 'alasql';| Feature | alasql.compile() |
compileToJS() |
|---|---|---|
| Returns | Function | String (source code) |
| Portable | No | Yes (requires alasql) |
| SQL parsing | Once | Once |
| Database tables | ✓ | ✓ |
| Parameterized queries | ✓ | ✓ |
- The generated code from
compileToJS()must be bound to analasqlinstance - SQL is parsed once during compilation; execution skips the parsing step
- Both database tables and parameterized queries are supported