diff --git a/src/main.c b/src/main.c index c691021..4944f29 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,8 @@ #include #include -#include +#include +#include +#include #include "InputBuffer.h" #include "scanner.h" @@ -62,7 +64,7 @@ int main() { prompt(); read_input(buffer); - if (strcmpi(buffer->buffer, ".exit") == 0) { + if (strcasecmp(buffer->buffer, ".exit") == 0) { break; } else { parse_input(buffer->buffer); diff --git a/src/parser.c b/src/parser.c index f6d9659..1b7bd1a 100644 --- a/src/parser.c +++ b/src/parser.c @@ -32,7 +32,7 @@ char *parser_node_type_to_str(ParserNodeType nodeType) { } ParserNode *new_parser_node(ParserNodeType type, ScannerToken *token) { - ParserNode *node = malloc(sizeof(ScannerToken)); + ParserNode *node = malloc(sizeof(ParserNode)); node->parent = NULL; node->type = type; node->phase = 0; @@ -144,7 +144,7 @@ StatementList *parser_node_convert(ParserNode *node) { case NODE_DROP_STMT: { DropStmt *drop= new_drop_stmt(); append_statement_list(list, new_statement(STMT_DROP, drop)); - drop->tableName = (child->children[0]->token->valueStr); + drop->tableName = strdup(child->children[0]->token->valueStr); } break; default: @@ -717,7 +717,7 @@ void parser_set_error(Parser *parser, char *err, ScannerToken *token) { parser->status = PARSESTATE_ERROR; if (token != NULL) { char *errMsg = calloc(128, sizeof(char)); - snprintf(errMsg, 128, "[%d:%d] %s", token->lineNo, token->linePos, err); + snprintf(errMsg, 128, "[%ld:%ld] %s", token->lineNo, token->linePos, err); parser->errMsg = strdup(errMsg); free(errMsg); } else { @@ -743,7 +743,7 @@ void parser_print_node_tree(ParserNode *node, size_t indent) { printf("<%s>", node->token->valueStr); break; case T_NUMBER: - printf("<%lld>", node->token->valueInt); + printf("<%ld>", node->token->valueInt); break; default: break; diff --git a/src/parser.h b/src/parser.h index 2a665af..86e2f61 100644 --- a/src/parser.h +++ b/src/parser.h @@ -8,7 +8,7 @@ #include #include #include "scanner.h" -#include "sql.h" +#include "SQL.h" #define PARSE_STATUS_LIST \ X(PARSESTATE_NONE) \ diff --git a/src/scanner.c b/src/scanner.c index ae64f87..d2e9911 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "scanner.h" char* scanner_token_type_to_str(ScannerTokenType tokenType) { @@ -21,7 +22,11 @@ char* scanner_token_type_to_str(ScannerTokenType tokenType) { ScannerToken *new_scanner_token() { ScannerToken *result = malloc(sizeof(ScannerToken)); - clear_scanner_token(result); + result->type = T_NONE; + result->valueInt = 0; + result->valueStr = NULL; + result->lineNo = 0; + result->linePos = 0; return result; } @@ -38,7 +43,7 @@ void clear_scanner_token(ScannerToken *result) { void free_scanner_token(ScannerToken *result) { if (result->valueStr != NULL) { - free(result); + free(result->valueStr); } free(result); } @@ -368,7 +373,7 @@ void scanner_set_error(Scanner *scanner, const char *errText) { //Create error msg char *errMsg = malloc(sizeof(char) * 128); - snprintf(errMsg, 128, "[%d:%d]: %s", scanner->lineNo, scanner->linePos, errText); + snprintf(errMsg, 128, "[%ld:%ld]: %s", scanner->lineNo, scanner->linePos, errText); if (scanner->errMsg != NULL) { free(scanner->errMsg);