Skip to content

Commit 7027ff4

Browse files
committed
feat: export columns method
1 parent 0d2395c commit 7027ff4

3 files changed

Lines changed: 32 additions & 1 deletion

File tree

src/column.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,4 +213,5 @@ export {
213213
columnOrderToSQL,
214214
columnReferenceDefinitionToSQL,
215215
fullTextSearchToSQL,
216+
getDual,
216217
}

src/parser.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { columnToSQL, getDual } from './column'
12
import { exprToSQL } from './expr'
23
import parsers from './parser.all'
34
import astToSQL from './sql'
@@ -19,6 +20,13 @@ class Parser {
1920
return exprToSQL(expr)
2021
}
2122

23+
columnsToSQL(columns, tables, opt = DEFAULT_OPT) {
24+
setParserOpt(opt)
25+
if (!columns || columns === '*') return []
26+
const isDual = getDual(tables)
27+
return columns.map(col => columnToSQL(col, isDual))
28+
}
29+
2230
parse(sql, opt = DEFAULT_OPT) {
2331
const { database = (PARSER_NAME || 'mysql') } = opt
2432
setParserOpt(opt)

test/ast.spec.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1268,8 +1268,30 @@ describe('AST', () => {
12681268
const sql = parser.exprToSQL(ast.where);
12691269
expect(sql).to.equal('`id` = 1');
12701270
});
1271+
1272+
it('should be able to get columns from ast', () => {
1273+
const ast = parser.astify(`SELECT
1274+
campaign.id,
1275+
ad_group.id,
1276+
'http://' + ad_group_ad.ad.final_urls + '?tm=123' as url,
1277+
ad_group_ad.resource_name,
1278+
ad_group_ad.policy_summary.policy_topic_entries as policy_topic_entries,
1279+
ad_group_ad.policy_summary.policy_topic_entries:topic as topic,
1280+
ad_group_ad.policy_summary.policy_topic_entries:topic + '!' as topic2
1281+
FROM ad_group_ad`);
1282+
const columns = parser.columnsToSQL(ast.columns, ast.from);
1283+
expect(columns).to.be.eql([
1284+
'`campaign`.`id`',
1285+
'`ad_group`.`id`',
1286+
"'http://' + `ad_group_ad`.`ad`.`final_urls` + '?tm=123' AS `url`",
1287+
'`ad_group_ad`.`resource_name`',
1288+
'`ad_group_ad`.`policy_summary`.`policy_topic_entries` AS `policy_topic_entries`',
1289+
'`ad_group_ad`.`policy_summary`.`policy_topic_entries:topic` AS `topic`',
1290+
"`ad_group_ad`.`policy_summary`.`policy_topic_entries:topic` + '!' AS `topic2`"
1291+
])
1292+
});
12711293
})
1272-
1294+
12731295
describe('jsonb operator ast order', () => {
12741296
it('should parse jsonb operator ast order correct', () => {
12751297
const sql = `SELECT company.name

0 commit comments

Comments
 (0)