Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.98 KB | None | 0 0
  1. class SQLBuilder
  2. {
  3. constructor(dbFlavour)
  4. {
  5. this.sql='';
  6. this.dbFlavour=dbFlavour;
  7. }
  8. select(columns)
  9. {
  10. this.sql+=' ##STATEMENT##SELECT ';
  11. let colSQL='';
  12. if(columns!='*')
  13. {
  14. columns.forEach(col=>{
  15. colSQL+=` ##COLUMN##${col} ,`;
  16. });
  17.  
  18. this.sql+=colSQL.substring(0,colSQL.lastIndexOf(','));
  19. }
  20. else
  21. {
  22. this.sql+=` ##COLUMN##${columns} `;
  23. }
  24.  
  25. return this;
  26. }
  27.  
  28. fromTable(table)
  29. {
  30. this.sql+=` ##GRAMMAR##FROM ##TABLE##${table.name} ##GRAMMAR##AS ##TABLE_ALIAS##${table.alias} `;
  31. return this;
  32. }
  33.  
  34. fromInnerQuery(query)
  35. {
  36. let innerQuery=query.query.toStringOmitSemiColon();
  37. this.sql+=` ##GRAMMAR##FROM ##INNERQUERY##(${innerQuery}) ${query.alias} `;
  38. return this;
  39. }
  40.  
  41. join(table)
  42. {
  43. this.sql+=` ##GRAMMAR##JOIN ##TABLE##${table.name} ##GRAMMAR##AS ##TABLE_ALIAS##${table.alias} `;
  44. return this;
  45. }
  46.  
  47. on(source,destination)
  48. {
  49. this.sql+=` ##GRAMMAR##ON ##JOIN_SOURCE_OPERATOR##${source} ##JOIN_OPERATOR##= ${destination} `;
  50. return this;
  51. }
  52.  
  53. where(operand,operator,value)
  54. {
  55. let whereSQL='';
  56. let operatorValue=this._getOperatorInSQL(operator.trim());
  57. if(value==='?')
  58. {
  59. whereSQL+=` ##GRAMMAR##WHERE ##OPERAND##${operand} ##OPERATOR##${operatorValue} ##VALUE##${value} `;
  60. }
  61. else
  62. {
  63. let val=this._getFormatForValue(value);
  64.  
  65. whereSQL+=` ##GRAMMAR##WHERE ##OPERAND##${operand} ##OPERATOR##${operatorValue} ##VALUE##${val} `;
  66. }
  67.  
  68. this.sql+=whereSQL;
  69. return this;
  70. }
  71.  
  72. groupBy(columns)
  73. {
  74. let colSQL=' ##GRAMMAR##GROUP BY ';
  75. columns.forEach(col=>{
  76. colSQL+=` ##COLUMN##${col} ,`;
  77. });
  78. this.sql+=colSQL.substring(0,colSQL.lastIndexOf(','));
  79. return this;
  80. }
  81.  
  82. orderBy(columns)
  83. {
  84. let colSQL=' ##GRAMMAR##ORDER BY ';
  85. columns.forEach(col=>{
  86. colSQL+=` ##COLUMN##${col} ,`;
  87. });
  88. this.sql+=colSQL.substring(0,colSQL.lastIndexOf(','));
  89. return this;
  90. }
  91.  
  92. parameters(params)
  93. {
  94. let count=0;
  95. let valueTokenizedStatements=this.sql.split('?');
  96. this.sql='';
  97. valueTokenizedStatements.forEach((v)=>{
  98. this.sql+=v+this._getFormatForValue(params[count]);
  99. count++;
  100. });
  101.  
  102. if(params.length!=(count-1))
  103. {
  104. this.sql+=this._getFormatForValue(params[params.length-1]);
  105. }
  106. return this;
  107. }
  108.  
  109. _getOperatorInSQL(operator){
  110. let op=' = ';
  111. switch(operator)
  112. {
  113. case 'GT':
  114. op=' > ';
  115. break;
  116. case 'GE':
  117. op=' >= ';
  118. break;
  119. case 'LE':
  120. op=' <= ';
  121. break;
  122. case 'LT':
  123. op=' < ';
  124. break;
  125. case 'EQ':
  126. op=' = ';
  127. break;
  128. case 'NE':
  129. op=' <> ';
  130. break;
  131. case 'IN':
  132. op=' IN ';
  133. break;
  134. case'NI':
  135. op=' NOT IN ';
  136. break;
  137. }
  138. return op;
  139. }
  140.  
  141.  
  142. _getFormatForValue(value)
  143. {
  144. let val='';
  145. switch(typeof value)
  146. {
  147. case "string":
  148. val=`'${value}'`;
  149. break;
  150. case "number":
  151. val=`${value}`;
  152. break;
  153. case "boolean":
  154. val=(value)?'TRUE':'FALSE';
  155. break;
  156. case "object":
  157. if(Array.isArray(value))
  158. {
  159. let arrValues=' ( ';
  160. value.forEach(ele=>{
  161. arrValues+=' '+this._getFormatForValue(ele)+', ';
  162. });
  163. arrValues=arrValues.substring(0,arrValues.lastIndexOf(','));
  164. arrValues+=' ) ';
  165. val+=arrValues;
  166. }
  167. else
  168. {
  169. val=`'${value.toString()}'`;
  170. }
  171.  
  172. break;
  173. default:
  174. val='';
  175. }
  176. return val;
  177. }
  178.  
  179.  
  180. toString()
  181. {
  182. return this.sql.replace(/(##\w+##)/gm,'')+';';
  183. }
  184.  
  185. toStringOmitSemiColon()
  186. {
  187. return this.sql.replace(/(##\w+##)/gm,'');
  188. }
  189.  
  190. }
  191.  
  192. const innerquery=new SQLBuilder().select(['emp.name','emp.title']).fromTable({name:'employees',alias:'emp'}).join({name:'salary',alias:'s'}).on('emp.id','s.empid').where('emp.age','EQ','?').groupBy(['emp.name','emp.age']).orderBy(['emp.name']).parameters([40]);
  193. const query=new SQLBuilder().select(['emp.name','emp.title']).fromInnerQuery({query:innerquery,alias:'inn'}).join({name:'salary',alias:'s'}).on('inn.id','s.empid').where('emp.age','EQ','?').groupBy(['emp.name','emp.age']).orderBy(['emp.name']).parameters([40]).toString();
  194. console.log(query);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement