-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
112 lines (106 loc) · 5.16 KB
/
index.js
File metadata and controls
112 lines (106 loc) · 5.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
const fetch = require('node-fetch')
const { toXML } = require("jstoxml");
'use strict';
/*
// option template
// you can try this
// ===========================================
// https://www.dpriver.com/pp/sqlformat.htm
// ===========================================
let options = {
dbvendor : "oracle", // endor, access, db2, mssql, mysql, oracle, mdx, generic
outputfmt : "SQL", // htmlkeeplayout, htmlkeeplayout2, htmlkeeplayoutmodifycase, htmlkeeplayout2modifycase, txtmodifycase, C#, C# String Builder, Delphi, Java, Java String Buffer, PHP, VB, VBSBD, VC, dbobject, proc, procobol, xml
keywordcs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
tablenamecs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
columnnamecs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
functioncs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
datatypecs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
variablecs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
aliascs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
quotedidentifiercs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
identifiercs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
lnbrwithcomma : "beforewithspace", // after,before,beforewithspace
liststyle : "stack", // stack,nostack
salign : "sright", // sleft,sright
quotechar : "\"",
maxlenincm : "80"
}
*/
let formatter = {
inputOptions : {},
outputOptionsDefalut : {
sqlpp_request : {
clientid : "dpriver-9094-8133-2031",
dbvendor : "oracle", // endor, access, db2, mssql, mysql, oracle, mdx, generic
outputfmt : "SQL", // htmlkeeplayout, htmlkeeplayout2, htmlkeeplayoutmodifycase, htmlkeeplayout2modifycase, txtmodifycase, C#, C# String Builder, Delphi, Java, Java String Buffer, PHP, VB, VBSBD, VC, dbobject, proc, procobol, xml
inputsql : "",
formatoptions : {
keywordcs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
tablenamecs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
columnnamecs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
functioncs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
datatypecs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
variablecs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
aliascs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
quotedidentifiercs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
identifiercs : "Uppercase", // Uppercase,Lowercase,InitCap,Unchanged,initcapeachword
lnbrwithcomma : "beforewithspace", // after,before,beforewithspace
liststyle : "stack", // stack,nostack
salign : "sright", // sleft,sright
quotechar : "\"",
maxlenincm : "80"
}
}
},
format : async function (pSql, pOptions) {
if ( pSql == undefined || pSql == null || pSql == "" ) return ""
let vOptions = formatter.outputOptionsDefalut
if ( pOptions != null ) {
formatter.chkOptions.forEach(function(item,index,arr2) {
if ( pOptions[item] != null && pOptions[item] != "" ) {
if ( item == "dbvendor" || item == "outputfmt" ) {
vOptions.sqlpp_request[item] = pOptions[item]
} else {
vOptions.sqlpp_request.formatoptions[item] = pOptions[item]
}
}
})
}
vOptions.sqlpp_request.inputsql = pSql
return fetch( "https://www.dpriver.com/cgi-bin/ppserver"
, {method:'post',body:toXML(vOptions)} )
.then(res=>res.text())
.then(res => {
let vSql = formatter.getXml(res, "formattedsql")
vSql = formatter.replaceAll(vSql, "<" , "<")
vSql = formatter.replaceAll(vSql, "&", "&")
vSql = formatter.replaceAll(vSql, ">" , ">")
if ( formatter.getXml(res,"retmessage") == "success" ) {
if ( vSql == "Input SQL is empty!" ) {
console.log("실패4")
return pSql
}
let hbb = pSql.match(/([\u0100-\uFFFD])+/g) // 한글 깨지기 전
let hba = vSql.match(/([\u0100-\uFFFD])+/g) // 한글 깨진 후
if ( hbb == null ) hbb = []
if ( hba == null ) hba = []
if ( hbb.length == hba.length ) {
for ( let ii =0; ii < hbb.length; ii++ ) { // 깨진 한글 보정
vSql = vSql.replace(hba[ii],hbb[ii])
}
} else { // 한글 등 특수문자 바인딩 실패
}
} else { // 파싱 실패, 포멧은 살아있다.
}
return vSql
})
},
chkOptions : ["keywordcs", "tablenamecs", "columnnamecs", "functioncs", "datatypecs", "variablecs", "aliascs", "quotedidentifiercs", "identifiercs", "lnbrwithcomma", "liststyle", "salign", "quotechar", "maxlenincm", "dbvendor", "outputfmt"],
replaceAll : (str, searchStr, replaceStr) => str.split(searchStr).join(replaceStr),
getXml : (pXml,pTag) => {
let ss = pXml.indexOf("<" + pTag + ">") + ("<" + pTag + ">").length
let sd = pXml.indexOf("</" + pTag + ">")
return pXml.substr(ss,sd-ss)
}
}
module.exports = formatter