#include "parser.h"
#include "usql.h"

// https://dev.to/joaoh82/what-would-sqlite-look-like-if-written-in-rust-part-1-2np4

// parser should get m_lexer as param and table executor to be able translate * or get types or so
// podporovat create as select
// drop table

int main(int argc, char *argv[]) {
	std::vector<std::string> sql_commands{
		    "create table a (i integer not null, s varchar(64), f float null)",
		    "insert into a (i, s) values(1, upper('one'))",
		    "insert into a (i, s) values(2, 'two')",
		    "insert into a (i, s) values(3, 'two')",
		    "insert into a (i, s) values(4, lower('FOUR'))",
		    "insert into a (i, s) values(5, 'five')",
		    "insert into a (i, s) values(to_date('20.12.1973', '%d.%m.%Y'), 'six')",
		    "save table a into '/tmp/a.csv'",
		    "select i, s from a where i > 2",
		    "select i, s from a where i = 1",
		    "select i, s from a where s = 'two'",
		    "select i, s from a where i <= 3 and s = 'one'",
		    "select i, s from a where i > 0",
		    "delete from a where i = 4",
		    "select i, s from a where i > 0",
		    "update a set f = 9.99 where i = 3",
		    "select i, s, f from a where i = 3",
		    "update a set s = 'three', f = f + 0.01 where i = 3",
		    "select i, s, f from a where i = 3",
		    "create table data (ticker varchar(8), price float null)",
		    "load data from '/Users/vaclavt/Library/Mobile Documents/com~apple~CloudDocs/Development/usql/data.csv')",
		    "select ticker, price from data",
		    "select i, s, f from a where i < 300",
		    "create table x as select i, s, f from a where i < 300",
		    "select i, s, f from x where i < 300",
		    "select i, s, f from a where i > 300",
		    "select i, to_string(i, '%d.%m.%Y'), s, f from a where i > 300"
	};


	usql::USql uSql{};

	for (auto command : sql_commands) {
		std::cout << command << std::endl;
		auto result = uSql.execute(command);

		result->print();
	}

	return 0;
}
