add: basic relay structure
add: improved sql calls
This commit is contained in:
		
							parent
							
								
									a38a6e63b3
								
							
						
					
					
						commit
						ac61c26d56
					
				
					 12 changed files with 426 additions and 77 deletions
				
			
		
							
								
								
									
										49
									
								
								helpers/create_sql_filtered_query.cc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								helpers/create_sql_filtered_query.cc
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
#include <helpers.h>
 | 
			
		||||
#include <drogon/drogon.h>
 | 
			
		||||
#include <globals.h>
 | 
			
		||||
 | 
			
		||||
sqlite3_stmt*
 | 
			
		||||
helpers::create_sql_filtered_query(const char *sql, sql_filter_builder **filters)
 | 
			
		||||
{
 | 
			
		||||
    char *old_query = (char*)sql;
 | 
			
		||||
    char *new_query;
 | 
			
		||||
 | 
			
		||||
    sql_filter_builder *filter;
 | 
			
		||||
    int filter_count = 0;
 | 
			
		||||
 | 
			
		||||
    do
 | 
			
		||||
    {
 | 
			
		||||
        filter = filters[filter_count];
 | 
			
		||||
 | 
			
		||||
        filter_count++;
 | 
			
		||||
        asprintf(&new_query, " %s %s=?%d %s", old_query, filter->col_name, filter_count, filter->logic);
 | 
			
		||||
 | 
			
		||||
        if(old_query != sql)
 | 
			
		||||
        {
 | 
			
		||||
            free(old_query);
 | 
			
		||||
        }
 | 
			
		||||
        old_query = new_query;
 | 
			
		||||
    } while(filter->logic[0] != ';');
 | 
			
		||||
 | 
			
		||||
    sqlite3_stmt *stmt;
 | 
			
		||||
 | 
			
		||||
    sqlite3_prepare_v2(globals::db, new_query, -1, &stmt, nullptr);
 | 
			
		||||
 | 
			
		||||
    free(new_query);
 | 
			
		||||
 | 
			
		||||
    for(int i = 0; i < filter_count; i++)
 | 
			
		||||
    {
 | 
			
		||||
        filter = filters[i];
 | 
			
		||||
 | 
			
		||||
        if(filter->bind_func == (intptr_t)&sqlite3_bind_int)
 | 
			
		||||
        {
 | 
			
		||||
            sqlite3_bind_int(stmt, i + 1, (int)(intptr_t)filter->value);
 | 
			
		||||
        }
 | 
			
		||||
        if(filter->bind_func == (intptr_t)&sqlite3_bind_text)
 | 
			
		||||
        {
 | 
			
		||||
            sqlite3_bind_text(stmt, i + 1, (char*)filter->value, -1, SQLITE_STATIC);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return stmt;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue