ts-sql
Version:
An SQL builder in Typescript. This project is heavily inspired by [XQL](/extjs/xql). A big shout out to @exjs and @kobalicek for this amazing project.
48 lines • 1.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const queryVisitor_1 = require("./queryVisitor");
const astsql_1 = require("./astsql");
class QueryAstPrinter extends queryVisitor_1.QueryVisitor {
constructor(dialect, query, options) {
super(dialect, query);
let defaultOptions = this.getDefaultOptions();
this._options = Object.assign({}, defaultOptions, options);
this._indents = new Map();
}
print() {
this.visit();
}
visitGenericNode(context, node) {
this.log(this.getIndentation(context) + astsql_1.SqlAstNode.getNodeType(node));
return super.visitGenericNode(context, node);
}
getDefaultOptions() {
return {
indentSize: 2,
logger: { log: (message) => console.log(message) }
};
}
log(message) {
this._options.logger.log(message);
}
getIndentation(context) {
if (context.parentNode) {
if (this._indents.has(context.parentNode)) {
this._indents.set(context.currentNode, (this._indents.get(context.parentNode) || 0) + 1);
}
}
else {
this._indents.set(context.currentNode, 0);
}
let ci = this._indents.get(context.currentNode) || 0;
return " ".repeat(ci * this._options.indentSize);
}
}
exports.QueryAstPrinter = QueryAstPrinter;
class MySQLAstPrinter extends QueryAstPrinter {
constructor(query, options) {
super("MySQL", query, options);
}
}
exports.MySQLAstPrinter = MySQLAstPrinter;
//# sourceMappingURL=astPrinter.js.map