mirror of
				https://github.com/fairwaves/openbts-2.8.git
				synced 2025-11-04 05:53:17 +00:00 
			
		
		
		
	git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@4912 19bc5d8c-e614-43d4-8b26-e1612bc8e597
		
			
				
	
	
		
			155 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
* Copyright 2010 Kestrel Signal Processing, Inc.
 | 
						|
* All rights reserved.
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
#include "sqlite3.h"
 | 
						|
#include "sqlite3util.h"
 | 
						|
 | 
						|
#include <string.h>
 | 
						|
#include <unistd.h>
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
 | 
						|
// Wrappers to sqlite operations.
 | 
						|
// These will eventually get moved to commonlibs.
 | 
						|
 | 
						|
int sqlite3_prepare_statement(sqlite3* DB, sqlite3_stmt **stmt, const char* query)
 | 
						|
{
 | 
						|
        int src = SQLITE_BUSY;
 | 
						|
        while (src==SQLITE_BUSY) {
 | 
						|
                src = sqlite3_prepare_v2(DB,query,strlen(query),stmt,NULL);
 | 
						|
                if (src==SQLITE_BUSY) {
 | 
						|
                        usleep(100000);
 | 
						|
                }
 | 
						|
        }
 | 
						|
        if (src) {
 | 
						|
                fprintf(stderr,"sqlite3_prepare_v2 failed for \"%s\": %s\n",query,sqlite3_errmsg(DB));
 | 
						|
                sqlite3_finalize(*stmt);
 | 
						|
        }
 | 
						|
        return src;
 | 
						|
}
 | 
						|
 | 
						|
int sqlite3_run_query(sqlite3* DB, sqlite3_stmt *stmt)
 | 
						|
{
 | 
						|
	int src = SQLITE_BUSY;
 | 
						|
	while (src==SQLITE_BUSY) {
 | 
						|
		src = sqlite3_step(stmt);
 | 
						|
		if (src==SQLITE_BUSY) {
 | 
						|
			usleep(100000);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if ((src!=SQLITE_DONE) && (src!=SQLITE_ROW)) {
 | 
						|
		fprintf(stderr,"sqlite3_run_query failed: %s: %s\n", sqlite3_sql(stmt), sqlite3_errmsg(DB));
 | 
						|
	}
 | 
						|
	return src;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool sqlite3_exists(sqlite3* DB, const char *tableName,
 | 
						|
		const char* keyName, const char* keyData)
 | 
						|
{
 | 
						|
	size_t stringSize = 100 + strlen(tableName) + strlen(keyName) + strlen(keyData);
 | 
						|
	char query[stringSize];
 | 
						|
	sprintf(query,"SELECT * FROM %s WHERE %s == \"%s\"",tableName,keyName,keyData);
 | 
						|
	// Prepare the statement.
 | 
						|
	sqlite3_stmt *stmt;
 | 
						|
	if (sqlite3_prepare_statement(DB,&stmt,query)) return false;
 | 
						|
	// Read the result.
 | 
						|
	int src = sqlite3_run_query(DB,stmt);
 | 
						|
	sqlite3_finalize(stmt);
 | 
						|
	// Anything there?
 | 
						|
	return (src == SQLITE_ROW);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
bool sqlite3_single_lookup(sqlite3* DB, const char *tableName,
 | 
						|
		const char* keyName, const char* keyData,
 | 
						|
		const char* valueName, unsigned &valueData)
 | 
						|
{
 | 
						|
	size_t stringSize = 100 + strlen(valueName) + strlen(tableName) + strlen(keyName) + strlen(keyData);
 | 
						|
	char query[stringSize];
 | 
						|
	sprintf(query,"SELECT %s FROM %s WHERE %s == \"%s\"",valueName,tableName,keyName,keyData);
 | 
						|
	// Prepare the statement.
 | 
						|
	sqlite3_stmt *stmt;
 | 
						|
	if (sqlite3_prepare_statement(DB,&stmt,query)) return false;
 | 
						|
	// Read the result.
 | 
						|
	int src = sqlite3_run_query(DB,stmt);
 | 
						|
	bool retVal = false;
 | 
						|
	if (src == SQLITE_ROW) {
 | 
						|
		valueData = (unsigned)sqlite3_column_int64(stmt,0);
 | 
						|
		retVal = true;
 | 
						|
	}
 | 
						|
	sqlite3_finalize(stmt);
 | 
						|
	return retVal;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// This function returns an allocated string that must be free'd by the caller.
 | 
						|
bool sqlite3_single_lookup(sqlite3* DB, const char* tableName,
 | 
						|
		const char* keyName, const char* keyData,
 | 
						|
		const char* valueName, char* &valueData)
 | 
						|
{
 | 
						|
	valueData=NULL;
 | 
						|
	size_t stringSize = 100 + strlen(valueName) + strlen(tableName) + strlen(keyName) + strlen(keyData);
 | 
						|
	char query[stringSize];
 | 
						|
	sprintf(query,"SELECT %s FROM %s WHERE %s == \"%s\"",valueName,tableName,keyName,keyData);
 | 
						|
	// Prepare the statement.
 | 
						|
	sqlite3_stmt *stmt;
 | 
						|
	if (sqlite3_prepare_statement(DB,&stmt,query)) return false;
 | 
						|
	// Read the result.
 | 
						|
	int src = sqlite3_run_query(DB,stmt);
 | 
						|
	bool retVal = false;
 | 
						|
	if (src == SQLITE_ROW) {
 | 
						|
		const char* ptr = (const char*)sqlite3_column_text(stmt,0);
 | 
						|
		if (ptr) valueData = strdup(ptr);
 | 
						|
		retVal = true;
 | 
						|
	}
 | 
						|
	sqlite3_finalize(stmt);
 | 
						|
	return retVal;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// This function returns an allocated string that must be free'd by tha caller.
 | 
						|
bool sqlite3_single_lookup(sqlite3* DB, const char* tableName,
 | 
						|
		const char* keyName, unsigned keyData,
 | 
						|
		const char* valueName, char* &valueData)
 | 
						|
{
 | 
						|
	valueData=NULL;
 | 
						|
	size_t stringSize = 100 + strlen(valueName) + strlen(tableName) + strlen(keyName) + 20;
 | 
						|
	char query[stringSize];
 | 
						|
	sprintf(query,"SELECT %s FROM %s WHERE %s == %u",valueName,tableName,keyName,keyData);
 | 
						|
	// Prepare the statement.
 | 
						|
	sqlite3_stmt *stmt;
 | 
						|
	if (sqlite3_prepare_statement(DB,&stmt,query)) return false;
 | 
						|
	// Read the result.
 | 
						|
	int src = sqlite3_run_query(DB,stmt);
 | 
						|
	bool retVal = false;
 | 
						|
	if (src == SQLITE_ROW) {
 | 
						|
		const char* ptr = (const char*)sqlite3_column_text(stmt,0);
 | 
						|
		if (ptr) valueData = strdup(ptr);
 | 
						|
		retVal = true;
 | 
						|
	}
 | 
						|
	sqlite3_finalize(stmt);
 | 
						|
	return retVal;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
bool sqlite3_command(sqlite3* DB, const char* query)
 | 
						|
{
 | 
						|
	// Prepare the statement.
 | 
						|
	sqlite3_stmt *stmt;
 | 
						|
	if (sqlite3_prepare_statement(DB,&stmt,query)) return false;
 | 
						|
	// Run the query.
 | 
						|
	int src = sqlite3_run_query(DB,stmt);
 | 
						|
	sqlite3_finalize(stmt);
 | 
						|
	return src==SQLITE_DONE;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 |