Database_SQLite3::~Database_SQLite3()
{
	FINALIZE_STATEMENT(m_stmt_begin)
	FINALIZE_STATEMENT(m_stmt_end)

	SQLOK_ERRSTREAM(sqlite3_close(m_database), "Failed to close database");
}
Exemple #2
0
void ReadTableStructure(
	Type&			type,
	sqlite3*		db,
	const wstring&	query )
{
	type.mNotNULL = false;
	
	sqlite3_stmt* stmt = SqliteSelect( db, query );
	if( stmt )
	{
		int count = sqlite3_column_count( stmt );
		for( int i = 0 ; i < count ; ++i )
		{
			const char*	name = sqlite3_column_name( stmt, i );

			Member fld;
			FROM_UTF8( name, fld.mName );
			ToLower( fld.mName );
	
			fld.mNotNULL	= false;
			fld.mType		= GetColumnType( stmt, i );
			type.mMembers.push_back( fld );
		}

		FINALIZE_STATEMENT( stmt );
	}
}
Exemple #3
0
RollbackManager::~RollbackManager()
{
	flush();

	FINALIZE_STATEMENT(stmt_insert);
	FINALIZE_STATEMENT(stmt_replace);
	FINALIZE_STATEMENT(stmt_select);
	FINALIZE_STATEMENT(stmt_select_range);
	FINALIZE_STATEMENT(stmt_select_withActor);
	FINALIZE_STATEMENT(stmt_knownActor_select);
	FINALIZE_STATEMENT(stmt_knownActor_insert);
	FINALIZE_STATEMENT(stmt_knownNode_select);
	FINALIZE_STATEMENT(stmt_knownNode_insert);

	SQLOK_ERRSTREAM(sqlite3_close(db), "Could not close db");
}
Exemple #4
0
Database_SQLite3::~Database_SQLite3()
{
	FINALIZE_STATEMENT(m_stmt_read)
	FINALIZE_STATEMENT(m_stmt_write)
	FINALIZE_STATEMENT(m_stmt_list)
	FINALIZE_STATEMENT(m_stmt_begin)
	FINALIZE_STATEMENT(m_stmt_end)
	FINALIZE_STATEMENT(m_stmt_delete)

	SQLOK(sqlite3_close(m_database), "Failed to close database");
}
Exemple #5
0
EValueType GetColumnType(
	sqlite3*		db,
	const wstring&	table,
	const wstring&	field )
{
	EValueType res = kUnknown;
	wstring query = L"SELECT [" + field + L"] FROM [" + table + L"] LIMIT 1";
	
	sqlite3_stmt* stmt = SqliteSelect( db, query );
	if( stmt )
	{
		res = GetColumnType( stmt, 0 );
		FINALIZE_STATEMENT( stmt );
	}
	
	return res;
}
Exemple #6
0
int SqliteExecute(
	sqlite3*		db,
	const wstring&	query )
{
	vector<char> buf;
	ConvertToUTF8( query, buf );

	const char* pq = &buf[ 0 ];
	SkipTabulation( pq );
	
	sqlite3_stmt* stmt = NULL;
	int qres = sqlite3_prepare_v2( db, pq, -1, &stmt, &pq );
	if( qres == SQLITE_OK ) 
		sqlite3_step( stmt );
		
	FINALIZE_STATEMENT( stmt );
	return qres;
}
Exemple #7
0
sqlite3_stmt* SqliteSelect(
	sqlite3*		db,
	const wstring&	query )
{
	vector<char> buf;
	ConvertToUTF8( query, buf );

	const char* pq = &buf[ 0 ];
	SkipTabulation( pq );

	sqlite3_stmt* stmt = NULL;

	int qres = sqlite3_prepare_v2( db, pq, -1, &stmt, &pq );
	if( qres == SQLITE_OK )
	{
		int ccount = sqlite3_column_count( stmt );
		if( ccount > 0 )
			return stmt;
	}

	FINALIZE_STATEMENT( stmt );
	return NULL;
}
 */

MapDatabaseSQLite3::MapDatabaseSQLite3(const std::string &savedir):
	Database_SQLite3(savedir, "map"),
	MapDatabase(),
	m_stmt_read(NULL),
	m_stmt_write(NULL),
	m_stmt_list(NULL),
	m_stmt_delete(NULL)
{

}

MapDatabaseSQLite3::~MapDatabaseSQLite3()
{
	FINALIZE_STATEMENT(m_stmt_read)
	FINALIZE_STATEMENT(m_stmt_write)
	FINALIZE_STATEMENT(m_stmt_list)
	FINALIZE_STATEMENT(m_stmt_delete)
}


void MapDatabaseSQLite3::createDatabase()
{
	assert(m_database); // Pre-condition

	SQLOK(sqlite3_exec(m_database,
		"CREATE TABLE IF NOT EXISTS `blocks` (\n"
			"	`pos` INT PRIMARY KEY,\n"
			"	`data` BLOB\n"
			");\n",
Exemple #9
0
bool Command::DoSelect( void )
{
	sqlite3_stmt* stmt = SqliteSelect( mpVM->mpDB, L"SELECT" + mParam.ToString() );
	if( !stmt )
	{
		mpVM->PrintError();
		return false;
	}
	
	int fcount = sqlite3_column_count( stmt );
	
	vector<vector<wstring> > tbl;
	vector<wstring>	row( fcount );
	vector<size_t> w( fcount, 2 );
	
	// Header
	for( int i = 0 ; i < fcount ; ++i )
	{
		const char* str = (const char*) sqlite3_column_name( stmt, i );
		FROM_UTF8( str, row[ i ] );
		w[ i ] = max( w[ i ], row[ i ].length() );
	}
	tbl.push_back( row );

	// Records
	int res = sqlite3_step( stmt );
	while( res == SQLITE_ROW )
	{
		for( int i = 0 ; i < fcount ; ++i )
		{
			const char* str = (const char*) sqlite3_column_text( stmt, i );
			if( str )
				FROM_UTF8( str, row[ i ] )
			else
				row[ i ].clear();
			
			w[ i ] = max( w[ i ], row[ i ].length() );
		}

		tbl.push_back( row );
		res = sqlite3_step( stmt );
	}

	// Horizontal line
	string fline( "+-" );
	for( int j = 0 ; j < fcount ; ++j )
	{
		fline.append( w[ j ], '-' );

		if( j < fcount - 1 )
			fline += "-+-";
	}
	fline += "-+";
	mpVM->Print( &fline[ 0 ] );
			
	// Print records
	size_t count = tbl.size();
	for( size_t i = 0 ; i < count ; ++i )
	{
		wstring line( L"| " );
		
		vector<wstring>& row = tbl[ i ];
		for( int j = 0 ; j < fcount ; ++j )
		{
			line += row[ j ];
			line.append( w[ j ] - row[ j ].length(), ' ' );
			
			if( j < fcount - 1 )
				line += L" | ";
		}

		line += L" |";
		mpVM->PrintW( line );
		
		if( !i )
			mpVM->Print( &fline[ 0 ] );
	}
	
	if( count > 1 )
		mpVM->Print( &fline[ 0 ] );
	
	FINALIZE_STATEMENT( stmt );
	return true;
}