int main(int argc, char * argv[]) { TokenType ttype; source = stdin; listing = stdout; struct stack_t *scannerStack = newStack(); //track tags int relevant = 0; //track if current tag section is relevant to print -- 0 is relevant, > 0 is irrelevant, < 0 is no tags while((ttype=getToken()) != ENDFILE) { /* if open tag, push onto stack */ if(ttype == 1) { push(scannerStack, formatToken(ttype, tokenString)); if(relevant > 0) relevant++; //increment relevant flag for any tag inside irrelevant tag else if(!compareToken(top(scannerStack))) relevant++; //increment relevant flag on irrelevant tag } /* if close tag, check top of stack for matching open tag */ if(ttype == 2) { /* if close tag does not match top of stack, report error */ if(top(scannerStack) == NULL || strcmp(top(scannerStack), formatToken(ttype, tokenString))) { if(relevant == 0) printf("-- Error: CLOSE-TAG </%s> with no matching open tag at top of stack at line %d\n", formatToken(ttype, tokenString), lineno); continue; } /* if close tag matches top of stack, pop */ else { pop(scannerStack); /* decrement relevant tag on pop if greater than 0 */ if(relevant > 0) { relevant--; continue; } } } /* print tokens if relevant and tag is on stack */ if(relevant == 0 && top(scannerStack) != NULL) printToken(ttype, tokenString); } /* print off remaining tags in stack as errors */ while(top(scannerStack)) { printf("-- Error: OPEN-TAG <%s> with no closing tag left over in stack\n", top(scannerStack)); pop(scannerStack); } destroyStack(&scannerStack); return 0; }
bool DDLIndexPopulator::checkNotNull(const IdxTuple& data, const erydbSystemCatalog::ColType& colType) { any nullvalue = DDLNullValueForType(colType); bool isNull = false; switch( colType.colDataType ) { case erydbSystemCatalog::BIT: break; case execplan::erydbSystemCatalog::TINYINT: isNull = any_cast<char>(data.data) == any_cast<char>(nullvalue); break; case execplan::erydbSystemCatalog::SMALLINT: isNull = any_cast<short>(data.data) == any_cast<short>(nullvalue); break; case execplan::erydbSystemCatalog::MEDINT: case execplan::erydbSystemCatalog::INT: isNull = any_cast<int>(data.data) == any_cast<int>(nullvalue); break; case execplan::erydbSystemCatalog::BIGINT: isNull = any_cast<long long>(data.data) == any_cast<long long>(nullvalue); break; case execplan::erydbSystemCatalog::DECIMAL: { if (colType.colWidth <= erydbSystemCatalog::FOUR_BYTE) isNull = any_cast<short>(data.data) == any_cast<short>(nullvalue); else if (colType.colWidth <= 9) isNull = any_cast<int>(data.data) == any_cast<int>(nullvalue); else if (colType.colWidth <= 18) isNull = any_cast<long long>(data.data) == any_cast<long long>(nullvalue); else isNull = compareToken(any_cast<WriteEngine::Token>(data.data), any_cast<WriteEngine::Token>(nullvalue)); break; } case execplan::erydbSystemCatalog::FLOAT: isNull = any_cast<float>(data.data) == any_cast<float>(nullvalue); break; case execplan::erydbSystemCatalog::DOUBLE: isNull = any_cast<double>(data.data) == any_cast<double>(nullvalue); break; case execplan::erydbSystemCatalog::DATE: isNull = any_cast<int>(data.data) == any_cast<int>(nullvalue); break; case execplan::erydbSystemCatalog::DATETIME: isNull = any_cast<long long>(data.data) == any_cast<long long>(nullvalue); break; case execplan::erydbSystemCatalog::CHAR: { if (colType.colWidth == execplan::erydbSystemCatalog::ONE_BYTE) isNull = any_cast<string>(data.data) == any_cast<string>(nullvalue); else if (colType.colWidth == execplan::erydbSystemCatalog::TWO_BYTE) isNull = any_cast<string>(data.data) == any_cast<string>(nullvalue); else if (colType.colWidth <= execplan::erydbSystemCatalog::FOUR_BYTE) isNull = any_cast<string>(data.data) == any_cast<string>(nullvalue); else isNull = compareToken(any_cast<WriteEngine::Token>(data.data), any_cast<WriteEngine::Token>(nullvalue)); break; } case execplan::erydbSystemCatalog::VARCHAR: { if (colType.colWidth == execplan::erydbSystemCatalog::ONE_BYTE) isNull = any_cast<string>(data.data) == any_cast<string>(nullvalue); else if (colType.colWidth < execplan::erydbSystemCatalog::FOUR_BYTE) isNull = any_cast<string>(data.data) == any_cast<string>(nullvalue); else isNull = compareToken(any_cast<WriteEngine::Token>(data.data), any_cast<WriteEngine::Token>(nullvalue)); break; } default: throw std::runtime_error("getNullValueForType: unkown column data type"); } if (isNull) logError("Null value not allowed in index"); return ! isNull; }