#pragma once

#include "parser.h"
#include "row.h"

#include <vector>

namespace usql {

    struct Table {

	Table(const Table &other);
	Table(const std::string name, const std::vector<ColDefNode> columns);

	ColDefNode get_column_def(const std::string &col_name);

	int columns_count() const { return m_col_defs.size(); };

	Row createEmptyRow();   // TODO this means unnecessary copying
	void addRow(const Row &row);
	void addCopyOfRow(const Row &row);

	void print();

	std::string m_name;
	std::vector<ColDefNode> m_col_defs;
	std::vector<Row> m_rows;
    };

}