Skip to content

Commit 0fac891

Browse files
committed
feat(js): keep formatting and indentation of the multiline SQL queries
Part of #26
1 parent bb0fe9d commit 0fac891

File tree

3 files changed

+76
-16
lines changed

3 files changed

+76
-16
lines changed

examples/js/express/mysql/routes.js

+57-7
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ const register = (app, pool) => {
2222

2323
app.get('/v1/collections/:collectionId/categories/count', (req, res, next) => {
2424
pool.query(
25-
'SELECT COUNT(DISTINCT s.category_id) AS counter FROM collections_series cs JOIN series s ON s.id = cs.series_id WHERE cs.collection_id = :collectionId',
25+
`SELECT COUNT(DISTINCT s.category_id) AS counter
26+
FROM collections_series cs
27+
JOIN series s
28+
ON s.id = cs.series_id
29+
WHERE cs.collection_id = :collectionId`,
2630
{ "collectionId": req.params.collectionId },
2731
(err, rows, fields) => {
2832
if (err) {
@@ -39,7 +43,12 @@ const register = (app, pool) => {
3943

4044
app.get('/v1/categories', (req, res, next) => {
4145
pool.query(
42-
'SELECT id , name , name_ru , slug , hidden FROM categories',
46+
`SELECT id
47+
, name
48+
, name_ru
49+
, slug
50+
, hidden
51+
FROM categories`,
4352
(err, rows, fields) => {
4453
if (err) {
4554
return next(err)
@@ -51,7 +60,27 @@ const register = (app, pool) => {
5160

5261
app.post('/v1/categories', (req, res, next) => {
5362
pool.query(
54-
'INSERT INTO categories ( name , name_ru , slug , hidden , created_at , created_by , updated_at , updated_by ) VALUES ( :name , :name_ru , :slug , :hidden , NOW() , :user_id , NOW() , :user_id )',
63+
`INSERT
64+
INTO categories
65+
( name
66+
, name_ru
67+
, slug
68+
, hidden
69+
, created_at
70+
, created_by
71+
, updated_at
72+
, updated_by
73+
)
74+
VALUES
75+
( :name
76+
, :name_ru
77+
, :slug
78+
, :hidden
79+
, NOW()
80+
, :user_id
81+
, NOW()
82+
, :user_id
83+
)`,
5584
{ "name": req.body.name, "name_ru": req.body.name_ru, "slug": req.body.slug, "hidden": req.body.hidden, "user_id": req.body.user_id },
5685
(err, rows, fields) => {
5786
if (err) {
@@ -64,7 +93,13 @@ const register = (app, pool) => {
6493

6594
app.get('/v1/categories/search', (req, res, next) => {
6695
pool.query(
67-
'SELECT id , name , name_ru , slug , hidden FROM categories WHERE hidden = :hidden',
96+
`SELECT id
97+
, name
98+
, name_ru
99+
, slug
100+
, hidden
101+
FROM categories
102+
WHERE hidden = :hidden`,
68103
{ "hidden": parseBoolean(req.query.hidden) },
69104
(err, rows, fields) => {
70105
if (err) {
@@ -77,7 +112,13 @@ const register = (app, pool) => {
77112

78113
app.get('/v1/categories/:categoryId', (req, res, next) => {
79114
pool.query(
80-
'SELECT id , name , name_ru , slug , hidden FROM categories WHERE id = :categoryId',
115+
`SELECT id
116+
, name
117+
, name_ru
118+
, slug
119+
, hidden
120+
FROM categories
121+
WHERE id = :categoryId`,
81122
{ "categoryId": req.params.categoryId },
82123
(err, rows, fields) => {
83124
if (err) {
@@ -94,7 +135,14 @@ const register = (app, pool) => {
94135

95136
app.put('/v1/categories/:categoryId', (req, res, next) => {
96137
pool.query(
97-
'UPDATE categories SET name = :name , name_ru = :name_ru , slug = :slug , hidden = :hidden , updated_at = NOW() , updated_by = :user_id WHERE id = :categoryId',
138+
`UPDATE categories
139+
SET name = :name
140+
, name_ru = :name_ru
141+
, slug = :slug
142+
, hidden = :hidden
143+
, updated_at = NOW()
144+
, updated_by = :user_id
145+
WHERE id = :categoryId`,
98146
{ "name": req.body.name, "name_ru": req.body.name_ru, "slug": req.body.slug, "hidden": req.body.hidden, "user_id": req.body.user_id, "categoryId": req.params.categoryId },
99147
(err, rows, fields) => {
100148
if (err) {
@@ -107,7 +155,9 @@ const register = (app, pool) => {
107155

108156
app.delete('/v1/categories/:categoryId', (req, res, next) => {
109157
pool.query(
110-
'DELETE FROM categories WHERE id = :categoryId',
158+
`DELETE
159+
FROM categories
160+
WHERE id = :categoryId`,
111161
{ "categoryId": req.params.categoryId },
112162
(err, rows, fields) => {
113163
if (err) {

src/cli.js

+14
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,20 @@ const createEndpoints = async (destDir, { lang }, config) => {
259259
return removePlaceholders(flattenQuery(removeComments(query)))
260260
},
261261

262+
// Differs from formatQuery() as it doesn't flatten query (preserve original formatting)
263+
// and also use backticks for multiline strings
264+
// (used only with JS)
265+
"formatQueryForJs": (query, indentLevel) => {
266+
const sql = removePlaceholders(removeComments(query))
267+
const indent = ' '.repeat(indentLevel)
268+
const isMultilineSql = sql.indexOf('\n') >= 0
269+
if (isMultilineSql) {
270+
const indentedSql = sql.replace(/\n/g, '\n' + indent)
271+
return "\n" + indent + '`' + indentedSql + '`'
272+
}
273+
return `\n${indent}'${sql}'`
274+
},
275+
262276
// (used only with Golang)
263277
"convertPathPlaceholders": convertPathPlaceholders,
264278
"sqlParser": parser,

src/templates/routes.js.ejs

+5-9
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ endpoints.forEach(function(endpoint) {
1515
}
1616
const hasGetOne = method.name === 'get'
1717
const hasGetMany = method.name === 'get_list'
18-
const sql = formatQuery(method.query)
18+
const sql = formatQueryForJs(method.query, 12)
1919
const params = extractParamsFromQuery(method.query)
2020
const formattedParams = params.length > 0
2121
? '\n { ' + formatParamsAsJavaScriptObject(params, method) + ' },'
@@ -24,8 +24,7 @@ endpoints.forEach(function(endpoint) {
2424
if (hasGetOne || hasGetMany) {
2525
%>
2626
app.get('<%- path %>', (req, res, next) => {
27-
pool.query(
28-
'<%- sql %>',<%- formattedParams %>
27+
pool.query(<%- sql %>,<%- formattedParams %>
2928
(err, rows, fields) => {
3029
if (err) {
3130
return next(err)
@@ -47,8 +46,7 @@ endpoints.forEach(function(endpoint) {
4746
if (method.name === 'post') {
4847
%>
4948
app.post('<%- path %>', (req, res, next) => {
50-
pool.query(
51-
'<%- sql %>',<%- formattedParams %>
49+
pool.query(<%- sql %>,<%- formattedParams %>
5250
(err, rows, fields) => {
5351
if (err) {
5452
return next(err)
@@ -62,8 +60,7 @@ endpoints.forEach(function(endpoint) {
6260
if (method.name === 'put') {
6361
%>
6462
app.put('<%- path %>', (req, res, next) => {
65-
pool.query(
66-
'<%- sql %>',<%- formattedParams %>
63+
pool.query(<%- sql %>,<%- formattedParams %>
6764
(err, rows, fields) => {
6865
if (err) {
6966
return next(err)
@@ -77,8 +74,7 @@ endpoints.forEach(function(endpoint) {
7774
if (method.name === 'delete') {
7875
%>
7976
app.delete('<%- path %>', (req, res, next) => {
80-
pool.query(
81-
'<%- sql %>',<%- formattedParams %>
77+
pool.query(<%- sql %>,<%- formattedParams %>
8278
(err, rows, fields) => {
8379
if (err) {
8480
return next(err)

0 commit comments

Comments
 (0)