Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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; 

  }