stmtInfo_t * sql_delete_parse( sqlInfo_t * db, const char ** s ) { deleteInfo_t * del = sql_calloc_stmt( db, sizeof(deleteInfo_t) ); del->stmt.type = SQL_DELETE; // 'FROM' if ( SWITCHSTRING( parse_temp( s ) ) == CS('f','r','o','m') ) { del->stmt.table = find_table( db, parse_temp( s ) ); } else return 0; switch ( SWITCHSTRING( parse_temp( s ) ) ) { // 'SEARCH' case CS('s','e','a','r'): Com_Error( ERR_FATAL, "DELETE statement does not support SEARCH.\n" ); break; // 'WHERE' case CS('w','h','e','r'): { parseInfo_t pi = { 0 }; pi.db = db; pi.table = del->stmt.table; pi.params = del->stmt.params; del->where_expr = parse_expression( s, &pi ); } break; } return &del->stmt; }
void det_temp(){ int8 store,display; int16 n,t; int16 current_temp = 0; int16 target_temp; switch (detector){ case 1 : target_temp = nv_d1_temp; break; case 2 : target_temp = nv_d2_temp; break; default : target_temp = 20000; break; } t = 60; // 5 mins = 300 sec >> delay = 300 / 5 = 60 n = 0; store=FALSE; display=FALSE; time_stamp(); sprintf(event_str, ",start heating,target[%Lu],actual[%Lu],readings[%Lu]\r\n", target_temp,current_temp,n); record_event(); for (n=1; n<t; ++n){ det_read(store, display); // detector read ~ 2.5 sec current_temp=parse_temp(); if (current_temp >= target_temp || current_temp == 0) break; // 0=fail (no detector) else delay_ms(2500); // completes the 5.0 loop } sprintf(event_str, ",end heating,target[%Lu],actual[%Lu],readings[%Lu]\r\n", target_temp,current_temp,n); record_event(); }
// INSERT INTO "commodities_events" VALUES(7, 5, 3, 400, 600); // INSERT INTO contacts(player,npc) VALUES(?,?); stmtInfo_t * sql_insert_parse( sqlInfo_t * db, const char ** s ) { columnInfo_t * c[ MAX_COLUMNS_PER_TABLE ]; int i,count=0; tableInfo_t * table; insertInfo_t * insert; char * n; // 'INTO' parse_temp( s ); n = parse_temp( s ); if ( db->create_filter ) { if ( Q_stricmp( n, db->create_filter ) ) { return 0; } } switch ( CS(n[0],n[1],n[2],0) ) { case CS('s','v','_',0): if ( db->memory_tag == TAG_SQL_CLIENT && !db->create_filter ) return 0; n += 3; break; case CS('c','l','_',0): if ( db->memory_tag == TAG_SQL_SERVER && !db->create_filter ) return 0; n += 3; break; case CS('b','g','_',0): n += 3; break; } table = find_table( db, n ); if ( !table ) return 0; ASSERT( table ); insert = sql_calloc_stmt( db, sizeof(insertInfo_t) ); insert->stmt.type = SQL_INSERT; insert->stmt.table = table; // parse column names if ( parse_tofirstparam( s ) ) { do { char * name = parse_temp( s ); c[ count ] = find_column( table, name ); #ifdef DEVELOPER if ( c[ count ] == 0 ) { Com_Error( ERR_FATAL, "column '%s' does not exist on table '%s'.\n", name, table->name ); } #endif count++; } while( parse_tonextparam( s ) ); } else { for ( i=0; i<table->column_count; i++ ) c[ count++ ] = &table->columns[ i ]; } // skip VALUES keyword switch ( SWITCHSTRING( parse_temp( s ) ) ) { case CS('s','e','l','e'): { insert->select = (selectInfo_t*)sql_select_parse( db, s ); for ( i=0; i<count; i++ ) { insert->columns[ i ] = (char)c[ i ]->num; } ASSERT( count == insert->select->column_count ); } break; case CS('v','a','l','u'): { parseInfo_t pi = { 0 }; pi.db = db; pi.params = insert->stmt.params; pi.table = insert->stmt.table; pi.flags = PARSE_ASSIGN_TO_COLUMN; pi.more = 1; // parse column assignments if ( parse_tofirstparam( s ) ) { for ( i=0; pi.more; i++ ) { pi.column = c[ i ]->num; insert->values_expr[ i ] = parse_expression( s, &pi ); } insert->values_count = i; } ASSERT( insert->values_count == count ); } break; case CS('r','o','w','s'): { cellInfo_t * row; parseInfo_t pi = { 0 }; Expr e; pi.db = db; pi.params = insert->stmt.params; pi.table = insert->stmt.table; pi.more = 1; if ( parse_tofirstparam( s ) ) { while ( pi.more ) { row = sql_insert_begin( db, table ); for ( i=0; i<table->column_count; i++ ) { int top = db->stmt_buffer.c->top; e = parse_expression( s, &pi ); row[ i ] = sql_eval( db, e, table, 0,0,1, 0, 0 ); if ( table->columns[ i ].format == STRING ) { row[ i ].string = sql_alloc_string( db, row[ i ].string ); } db->stmt_buffer.c->top = top; } sql_insert_done( db, table ); } } return 0; } break; } return &insert->stmt; }