Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.70 KB | None | 0 0
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package eg.edu.alexu.csd.oop.db;
  7. import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader;
  8. import java.io.FileNotFoundException;
  9. import java.sql.Array;
  10. import java.util.ArrayList;
  11. import java.util.Arrays;
  12. import java.util.HashMap;
  13. import java.util.LinkedHashMap;
  14. import java.util.List;
  15. import java.util.Map;
  16. import java.util.StringTokenizer;
  17. import java.util.regex.Matcher;
  18. import java.util.regex.Pattern;
  19. import javax.xml.stream.XMLStreamException;
  20.  
  21. /**
  22. *
  23. * @author Mustafa
  24. */
  25. public class SQL {
  26. final Pattern createtable;
  27. final Pattern droptable ;
  28. final Pattern insertinto ;
  29. final Pattern deletefrom ;
  30. final Pattern select ;
  31. Pattern []patternarray = new Pattern[5] ;
  32.  
  33. public SQL(){
  34.  
  35. this.createtable = Pattern.compile("(?i)create\\s+table\\s+\\w+\\s*(.*);");
  36. this. droptable = Pattern.compile("(?i)drop\\s+table\\s+\\w+\\s*;");
  37. this.insertinto = Pattern.compile("(?i)insert\\s+into\\s+\\w+\\s*(.*)values\\s*(.*);");
  38. this.deletefrom = Pattern.compile("(?i)delete\\s+from\\s+\\w+\\s*where\\s*(.*);");
  39. this.select = Pattern.compile("(?i)select\\s*(.*)\\s*from\\s+\\w+\\s*(where\\s*(.*));");
  40.  
  41. patternarray[0] = createtable;
  42. patternarray[1] = droptable;
  43. patternarray[2] = insertinto;
  44. patternarray[3] = deletefrom;
  45. patternarray[4] = select;
  46.  
  47. }
  48.  
  49.  
  50. public void query (String query) throws XMLStreamException, FileNotFoundException{
  51.  
  52. StringTokenizer token = new StringTokenizer(query);
  53. StringBuilder std = new StringBuilder();
  54. while (token.hasMoreTokens()){
  55. std.append(token.nextToken());
  56. std.append(" ");
  57.  
  58. }
  59.  
  60. for (int i = 0 ;i <patternarray.length;i++){
  61. // System.out.println(std.toString());
  62. Matcher m = patternarray[i].matcher(std.toString());
  63.  
  64. if (m.find()){
  65. // System.out.println(i);
  66. // method i
  67. CaptureTheQuery(i,std.toString());
  68. }
  69. }
  70.  
  71.  
  72. }
  73.  
  74. public void CaptureTheQuery(int i, String query) throws XMLStreamException, FileNotFoundException {
  75.  
  76. switch (i) {
  77. case 0:
  78. /*
  79. Matcher matcher = Pattern.compile("CREATE\\s+TABLE\\s+\"?(\\w+)").matcher(query);
  80. if (matcher.find()) {
  81. String name = matcher.group(1);
  82. //System.out.print(name);
  83. }*/
  84. String name = null;
  85. Matcher matcher = Pattern.compile("(?i)\\s*CREATE\\s+TABLE?\\s+(\\w+)").matcher(query);
  86. if (matcher.find()) {
  87. name = matcher.group(1);
  88. // System.out.print(name + "\n");
  89. }
  90. StringBuilder a = new StringBuilder();
  91. boolean paren = false;
  92. for (char ch: query.toCharArray())
  93. {
  94. if(ch == '(')
  95. paren = true;
  96. if(ch == ')')
  97. paren = false;
  98. if(paren == true&& ch !='(' && ch != '\n' && ch!= '\t')
  99. {
  100. a.append(ch);
  101. }
  102.  
  103.  
  104. }
  105. // System.out.println(a.toString());
  106. // String subject = "HELLO , THERE ,WORLD";
  107. String[] couple = a.toString().split(",");
  108. String[] column_name = new String[couple.length];
  109.  
  110. String[] data_types = new String[couple.length];
  111.  
  112. for(int z=0; z<couple.length; z++)
  113. {
  114. // System.out.print(couple[z]);
  115. Matcher iii = Pattern.compile("(?i)(\\w+)\\s*(\\w+)").matcher(couple[z]);
  116. // System.out.print(couple[z]);
  117. if (iii.find()) {
  118. column_name[z] = iii.group(1);
  119. data_types[z] = iii.group(2);
  120. }
  121. // System.out.println(column_name[z]);
  122. // column_name[z] = matcher.group(1);
  123. // data_types[z] = matcher.group(2);
  124. }
  125. // System.out.println(Arrays.toString(data_types) +" "+ Arrays.toString(column_name) );
  126. List<Map<String, String>> Data = new ArrayList();
  127. Controller.controller().Create(name, Data);
  128. // System.out.println(name + " created successfully ");
  129.  
  130. // creat table
  131. break;
  132. case 1:
  133. matcher = Pattern.compile("(?i)\\s*DROP\\s+TABLE?\\s+(\\w+);").matcher(query);
  134.  
  135. if (matcher.find()) {
  136. name = matcher.group(1);
  137. Controller.controller().Drop(name);
  138. // System.out.print(name+ " Dropped");
  139. }
  140.  
  141.  
  142.  
  143. // drop table
  144.  
  145. break;
  146. case 2:
  147.  
  148.  
  149. // insert into table
  150.  
  151. int parenth_lvl = 0;
  152. a = new StringBuilder();
  153. StringBuilder b = new StringBuilder();
  154. matcher = Pattern.compile("(?i)\\s*INSERT\\s*INTO\\s*(\\w+)\\s*").matcher(query);
  155.  
  156. if (matcher.find()) {
  157. name = matcher.group(1);
  158. for (char ch: query.toCharArray())
  159. {
  160. if(ch == '(')
  161. parenth_lvl++;
  162. if(ch == ')')
  163. {
  164. parenth_lvl++;
  165. }
  166. if(parenth_lvl ==1&& ch !='(' && ch != '\n' && ch != ' ' && ch!= '\t')
  167. {
  168. a.append(ch);
  169. }
  170. if(parenth_lvl ==3&& ch !='(' && ch != '\n' && ch != ' ' && ch!= '\t')
  171. {
  172. b.append(ch);
  173. }
  174.  
  175. }
  176. String[] Columns = a.toString().split(",");
  177. String[] Values = b.toString().split(",");
  178. Map<String,String> new_data = new LinkedHashMap<String,String>();
  179. for( i =0; i<Columns.length;i++ )
  180. {
  181. new_data.put(Columns[i], Values[i]);
  182. }
  183.  
  184.  
  185. Controller.controller().Insert(name, new_data);
  186. // System.out.println(Arrays.toString(Values) +" " + Arrays.toString(Columns));
  187.  
  188. }
  189.  
  190.  
  191.  
  192.  
  193. break;
  194. case 3:
  195. // delete from
  196.  
  197. matcher = Pattern.compile("(?i)\\s*DELETE\\s+FROM\\s*(\\w+)\\s*where\\s*(\\w+)\\s*(=|<|>)\\s*(\\w+)\\s*;").matcher(query);
  198. if (matcher.find()) {
  199. name = matcher.group(1);
  200. String op = matcher.group(3);
  201. String LHS = matcher.group(2);
  202. String RHS = matcher.group(4);
  203.  
  204. //Delete (String tableName ,char operator, String col, String val )
  205. char[] operand = op.toCharArray();
  206. System.out.print( name + " " +LHS + " "+op + " " + RHS );
  207. Controller.controller().Delete(name, operand[0], LHS, RHS);
  208.  
  209. }
  210.  
  211.  
  212. break;
  213. case 4:
  214. // selsct from
  215. matcher = Pattern.compile("(?i)\\s*SELECT\\s*((\\w+),\\s*|(\\w+))*\\s*FROM\\s*(\\w+)\\s*WHERE\\s*(\\w+)\\s*(=|<|>)\\s*(\\w+)\\s*;").matcher(query);
  216. if (matcher.find()) {
  217. name = matcher.group(4);
  218. String op = matcher.group(6);
  219. String LHS = matcher.group(5);
  220. String RHS = matcher.group(7);
  221. // System.out.print( name + " " +LHS + " "+op + " " + RHS );
  222. // System.out.print( Arrays.toString(Columns_names) );
  223. a= new StringBuilder();
  224. b= new StringBuilder();
  225. boolean flag = false;
  226. for (char ch: query.toCharArray())
  227. {
  228. a.append(ch);
  229. if(flag == true && ch != ' ' )
  230. b.append(ch);
  231. if(a.toString().equalsIgnoreCase("select") )
  232. {
  233. flag = true;
  234. }
  235.  
  236.  
  237. }
  238. String[] Columns = b.toString().split(",");
  239. matcher = Pattern.compile("(?i)\\s*(\\w+)\\s*FROM").matcher(Columns[Columns.length-1]);
  240. if (matcher.find()) {
  241. Columns[Columns.length-1] = matcher.group(1);
  242. }
  243.  
  244. //(String tableName, String[] columns, char operator, String col, String val)
  245. char[] operand = op.toCharArray();
  246. // System.out.print( Arrays.toString(Columns) +name + RHS +operand[0] + LHS+ " " );
  247. Controller.controller().Select(name, Columns ,operand[0] , LHS , RHS );
  248. }
  249.  
  250.  
  251. break;
  252. }
  253.  
  254. }
  255.  
  256.  
  257.  
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement