2018.4.12
@Override
public void exitDelete_stmt(SQLParser.Delete_stmtContext ctx) {
String tableName = ctx.table_name().getText();
Table currentTable = manager.getCurrentDB().getTable(tableName);
String comparator = ctx.multiple_condition().condition().comparator().getText();
System.out.println(comparator);
String attrName = ctx.multiple_condition().condition().expression(0).getText();
String attrValue = ctx.multiple_condition().condition().expression(1).getText();
System.out.println(attrName);
System.out.println(attrValue);
ArrayList<Entry> deleteEntries = new ArrayList<>();
int attrNameIndex = 0;
ArrayList<Column> currentColumns = currentTable.columns;
for(int i=0;i<currentTable.columnNumber();i++){
System.out.println(currentColumns.get(i).name());
if(currentColumns.get(i).name().equals(attrName)){
attrNameIndex = i;
break;
}
}
int primaryIndex = currentTable.primaryIndex();
Entry attrValueEntry = new Entry(attrValue);
Iterator<Row> iterator = currentTable.iterator();
switch (comparator){
case "=":
while(iterator.hasNext()){
Row currentRow = iterator.next();
if(currentRow.getEntries().get(attrNameIndex).compareTo(attrValueEntry)==0){
deleteEntries.add(currentRow.getEntries().get(primaryIndex));
}
}
break;
case "<":
while(iterator.hasNext()){
Row currentRow = iterator.next();
if(currentRow.getEntries().get(attrNameIndex).compareTo(attrValueEntry)<0){
deleteEntries.add(currentRow.getEntries().get(primaryIndex));
}
}
break;
case ">":
while(iterator.hasNext()){
Row currentRow = iterator.next();
if(currentRow.getEntries().get(attrNameIndex).compareTo(attrValueEntry)>0){
deleteEntries.add(currentRow.getEntries().get(primaryIndex));
}
}
break;
case "<=":
while(iterator.hasNext()){
Row currentRow = iterator.next();
if(currentRow.getEntries().get(attrNameIndex).compareTo(attrValueEntry)<=0){
deleteEntries.add(currentRow.getEntries().get(primaryIndex));
}
}
break;
case ">=":
while(iterator.hasNext()){
Row currentRow = iterator.next();
if(currentRow.getEntries().get(attrNameIndex).compareTo(attrValueEntry)>=0){
deleteEntries.add(currentRow.getEntries().get(primaryIndex));
}
}
break;
case "<>":
while(iterator.hasNext()){
Row currentRow = iterator.next();
if(currentRow.getEntries().get(attrNameIndex).compareTo(attrValueEntry)!=0){
deleteEntries.add(currentRow.getEntries().get(primaryIndex));
}
}
break;
default:
break;
}
for (Entry deleteEntry : deleteEntries) {
currentTable.delete(deleteEntry);
}
status.msg+="Delete Successfully.\n";
}