· 6 years ago · Nov 26, 2019, 03:32 PM
1package eg.edu.alexu.csd.oop.db.cs39;
2import java.sql.SQLException;
3import java.util.HashMap;
4import java.util.Map;
5
6
7
8public class IDataBase implements Database {
9
10
11
12 Parser parser = new Parser();
13 Partitions p = new Partitions();
14 //Map of all created databases
15 Map<String,DB> m = new HashMap<String, DB >();
16 DB lastDB;
17 private Command DBcommandCreate ;
18 private Command DBcommandDrop ;
19 Command DropTable;
20 Command CreateTable;
21 Select selecTable;
22 Insert insertTable;
23 Update updateTable;
24 String querySmall;
25 Delete deleteTable;
26 String LastDBpath;
27
28 public void QueryManagement (String query) throws SQLException
29 {
30 //create db
31 if(parser.checkInput(query) == 2 || parser.checkInput(query) == 3)
32 {
33 //drop-if-exist should be handled
34 LastDBpath = this.createDatabase(parser.object.getDatabasename(), false) ;
35 System.out.println("Database is Created / Deleted");
36
37 }
38 //create table,drop table,called internally when create db , drop db
39 else if ( parser.checkInput(query) == 4 || parser.checkInput(query) == 8 )
40 {
41 this.executeStructureQuery(query);
42 }
43 //update method
44 else if( parser.checkInput(query) == 5 || parser.checkInput(query) == 6 || parser.checkInput(query) == 7)
45 {
46 System.out.println("ha?");
47 this.executeUpdateQuery(query);
48 }
49 //select
50 else if(parser.checkInput(query) == 9 )
51 {
52 this.executeQuery(query);
53 }
54 else
55 {
56 System.out.println("no query is selected");
57 }
58
59 }
60
61
62 @Override
63 public String createDatabase(String databaseName, boolean dropIfExists) {
64
65
66 if(m.containsKey(databaseName) == false)
67 {
68 DBcommandCreate = new CreateDB(databaseName);
69 try {
70 executeStructureQuery("createdatabase");
71 } catch (SQLException e) {
72 e.printStackTrace();
73 }
74 return DBcommandCreate.getpathofDB();
75 }
76 else if ( m.containsKey(databaseName) == true && dropIfExists )
77 {
78 DBcommandDrop = new DropDB(databaseName, m);
79 try {
80 executeStructureQuery("dropdatabase");
81 } catch (SQLException e) {
82 e.printStackTrace();
83 }
84 DBcommandCreate = new CreateDB(databaseName);
85 try {
86 executeStructureQuery("createdatabase");
87 } catch (SQLException e) {
88 e.printStackTrace();
89 }
90 return DBcommandCreate.getpathofDB();
91 }
92 else //It exists and it is not required to drop it
93 {
94 return m.get(databaseName).getAbsolutePath();
95 }
96
97 }
98
99 @Override
100 public boolean executeStructureQuery(String query) throws SQLException {
101
102 querySmall = query.toLowerCase();
103
104 if(query == "createdatabase")
105 {
106 DBcommandCreate.execute();
107 m.put(DBcommandCreate.getnameofDB(), DBcommandCreate.getDB() );
108 lastDB = DBcommandCreate.getDB();
109
110 return true;
111 }
112 else if (query == "dropdatabase")
113 {
114 DBcommandDrop.execute();
115 m.remove(DBcommandDrop.getnameofDB());
116 return true;
117 }
118 else if (querySmall.contains("create") && querySmall.contains("table"))
119 {
120 // i will call class partitions with string query ..to get table name,names , types ,parent DB..
121 p.CreateTable(query);
122 //System.out.println("n!!!!" + p.getTablename());
123 CreateTable = new CreateTable(p.getTablename(), p.getcolumns(), p.gettypes(), lastDB.getDatabaseName(),lastDB);
124 CreateTable.execute();
125
126 return true;
127 }
128 else if( querySmall.contains("drop") && querySmall.contains("table") )
129 {
130 // i will call class partitions with string query ..to get table name.
131 p.DropTable(query);
132 DropTable = new DropTable(p.getTablename(), lastDB);
133 System.out.println("a7a gowa");
134 System.out.println(lastDB.getAbsolutePath());
135 DropTable.execute();
136
137 return true;
138 }
139 else
140 {
141 //no query is right ...
142 return false;
143 }
144
145 }
146
147 @Override
148 public Object[][] executeQuery(String query) throws SQLException {
149
150 //selecTable = new Select(TableName, ParentDB, cols);
151 try {
152 return selecTable.execute();
153 } catch (Exception e) {
154 e.printStackTrace();
155 return null; //should be handled
156 }
157 }
158
159 @Override
160 public int executeUpdateQuery(String query) throws SQLException {
161
162 //insert //update //delete
163 querySmall = query.toLowerCase();
164 if(querySmall.contains("insert"))
165 { p.parent=lastDB;
166 p.Insert(query);
167 insertTable = new Insert(p.getTablename() , lastDB, p.getvalues() );
168 try {
169 System.out.println("hey i am inserted");
170 insertTable.columns=p.getcolumns();
171 return insertTable.execute();
172
173 } catch (Exception e) {
174 e.printStackTrace();
175 System.out.println("hey i am not inserted");
176 return 0;
177 }
178
179
180 }
181 else if(querySmall.contains("update"))
182 {
183 p.Update(query);
184 updateTable = new Update(p.getTablename(), lastDB,p.getOperator(), p.getUpdatevalue2(), p.getUpdatecolumn2(),p.getUpdatecolumn1(), p.getUpdatevalue1());
185 try {
186 return updateTable.execute();
187
188 } catch (Exception e) {
189 // TODO Auto-generated catch block
190 return 0;
191 }
192
193 }
194 else if(querySmall.contains("delete"))
195 {
196 p.Delete(query);
197 deleteTable = new Delete(p.getTablename(), lastDB, p.getDeletecolumn(), p.getDeletevalue());
198 try {
199 return deleteTable.execute();
200 } catch (Exception e) {
201 e.printStackTrace();
202 return 0;
203 }
204 }
205 else
206 {
207 return 0;
208 }
209
210 }
211
212}