diff --git a/DBMS/DBMS/dbManage.cpp b/DBMS/DBMS/dbManage.cpp index 1836df7..e2f987d 100644 --- a/DBMS/DBMS/dbManage.cpp +++ b/DBMS/DBMS/dbManage.cpp @@ -422,9 +422,16 @@ bool DBManager::deleteRecord(string tableName,BYTE **Value,string *colName,BYTE else if(col->xtype == VARCHAR_TYPE){ string data(dataUtility::getbyte(dataPage->page->data,offset*recordLength+col->index,col->length)); string comData(dataUtility::getbyte((char*)Value[i], 0, (int)len[i])); - if (!dataUtility::stringOptstring(data, op[i], comData)){ - deleteFlag = false; - break; + if (dataUtility::toUpper(comData).compare("NULL")==0) { + if ((int)((char)dataUtility::getbyte(dataPage->page->data, offset*recordLength+col->index-1, 1)[0]) == 0) { + deleteFlag = false; + break; + } + } else { + if (!dataUtility::stringOptstring(data, op[i], comData)){ + deleteFlag = false; + break; + } } } } diff --git a/DBMS/DBMS/wq_parser.cpp b/DBMS/DBMS/wq_parser.cpp index 7fb93ae..3ea78d7 100644 --- a/DBMS/DBMS/wq_parser.cpp +++ b/DBMS/DBMS/wq_parser.cpp @@ -620,12 +620,14 @@ bool parser::parserSet(vector commands, string tablename) { if (!checkStingIsInt(commands[i])) return false; } else if (t.xtype == VARCHAR_TYPE) { - if (commands[i].at(commands[i].length()-1)=='\'') - commands[i].erase(commands[i].end()-1); - if (commands[i].at(0) == '\'') - commands[i].erase(commands[i].begin()); - if (commands[i].length() > t.length) - return false; + if (dataUtility::toUpper(commands[i]).compare("NULL")!=0) { + if (commands[i].at(commands[i].length()-1)=='\'') + commands[i].erase(commands[i].end()-1); + if (commands[i].at(0) == '\'') + commands[i].erase(commands[i].begin()); + if (commands[i].length() > t.length) + return false; + } } table1Require.push_back(columnRequire(commands[i],colNameTemp,t.xtype, commands[i].length(), SET)); i++; @@ -668,12 +670,14 @@ bool parser::parserWhere(vector commands, string tablename) { if (!checkStingIsInt(commands[i+1])) return false; } else if (t.xtype == VARCHAR_TYPE) { - if (commands[i+1].at(commands[i+1].length()-1)=='\'') - commands[i+1].erase(commands[i+1].end()-1); - if (commands[i+1].at(0) == '\'') - commands[i+1].erase(commands[i+1].begin()); - if (commands[i+1].length() > t.length) - return false; + if (dataUtility::toUpper(commands[i+1]).compare("NULL")!=0) { + if (commands[i+1].at(commands[i+1].length()-1)=='\'') + commands[i+1].erase(commands[i+1].end()-1); + if (commands[i+1].at(0) == '\'') + commands[i+1].erase(commands[i+1].begin()); + if (commands[i+1].length() > t.length) + return false; + } } table1Require.push_back(columnRequire(commands[i+1],colNameTemp,t.xtype, commands[i+1].length(), getOpt(commands[i]))); i++;