return status;
}
- void BindData(sqlite3_stmt * statement, int pos, SQLiteField fld, typed_object data, SerialBuffer * bufferOut)
+ bool BindData(sqlite3_stmt * statement, int pos, SQLiteField fld, typed_object data, SerialBuffer * bufferOut)
{
+ int result = 1;
Class dataType = fld.type;
SerialBuffer buffer = null;
switch(fld.sqliteType)
switch(dataType.typeSize)
{
case 8:
- sqlite3_bind_int64(statement, pos, (sqlite3_int64)*(int64 *)data);
+ result = sqlite3_bind_int64(statement, pos, (sqlite3_int64)*(int64 *)data);
break;
case 4:
- sqlite3_bind_int(statement, pos, *(int *)data);
+ result = sqlite3_bind_int(statement, pos, *(int *)data);
break;
case 2:
{
value = (int)*(short *)data;
else
value = (int)*(uint16 *)data;
- sqlite3_bind_int(statement, pos, value);
+ result = sqlite3_bind_int(statement, pos, value);
break;
}
case 1:
value = (int)*(char *)data;
else
value = (int)*(byte *)data;
- sqlite3_bind_int(statement, pos, value);
+ result = sqlite3_bind_int(statement, pos, value);
break;
}
}
case SQLITE_FLOAT:
{
if(dataType.typeSize == 8)
- sqlite3_bind_double(statement, pos, *(double *)data);
+ result = sqlite3_bind_double(statement, pos, *(double *)data);
else
- sqlite3_bind_double(statement, pos, (double)*(float *)data);
+ result = sqlite3_bind_double(statement, pos, (double)*(float *)data);
break;
}
case SQLITE_TEXT:
{
if((char *)data)
- sqlite3_bind_text(statement, pos, (char *)data, strlen((char *)data), SQLITE_TRANSIENT);
+ result = sqlite3_bind_text(statement, pos, (char *)data, strlen((char *)data), SQLITE_TRANSIENT);
else
- sqlite3_bind_text(statement, pos, null, 0, SQLITE_TRANSIENT);
+ result = sqlite3_bind_text(statement, pos, null, 0, SQLITE_TRANSIENT);
break;
}
case SQLITE_BLOB:
{
buffer = SerialBuffer { };
dataType._vTbl[__ecereVMethodID_class_OnSerialize](dataType, data, buffer);
- sqlite3_bind_text(statement, pos, buffer._buffer, buffer.count, SQLITE_TRANSIENT);
+ result = sqlite3_bind_text(statement, pos, buffer._buffer, buffer.count, SQLITE_TRANSIENT);
break;
}
}
*bufferOut = buffer;
else
delete buffer;
+ return !result;
}
void AddCursorWhereClauses(char * command, MoveOptions move, bool useIndex)
return !result;
}
+ bool BindQueryData(int pos, SQLiteField fld, typed_object data)
+ {
+ if(curStatement != queryStatement)
+ {
+ if(curStatement) sqlite3_reset(curStatement);
+ curStatement = queryStatement;
+ }
+ sqlite3_reset(queryStatement);
+ return BindData(queryStatement, pos, fld, data, null);
+ }
+
/*char * GetExtraColumn(int paramID)
{
SQLiteField lastFld = tbl.fields.last;
bool GetData(Field field, typed_object & data) { return (row && field) ? row.GetData(field, data) : false; }
bool SetData(Field field, typed_object data) { return (row && field) ? row.SetData(field, data) : false; }
bool Delete() { return row ? row.Delete() : false; }
- // TODO: Implement as a typed_object?
bool SetQueryParam(int paramID, int value) { return row ? row.SetQueryParam(paramID, value) : false; }
bool SetQueryParam64(int paramID, int64 value) { return row ? row.SetQueryParam64(paramID, value) : false; }
bool SetQueryParamText(int paramID, char * value) { return row ? row.SetQueryParamText(paramID, value) : false; }
bool SetQueryParamObject(int paramID, void * value, Class type) { return row ? row.SetQueryParamObject(paramID, value, type) : false; }
+ // TOCHECK: Field is passed here to have sqlite type handy. The API might be nicer without
+ bool BindQueryData(int paramID, Field fld, typed_object value) { return row ? row.BindQueryData(paramID, fld, value) : false; }
char * GetColumn(int paramID) { return row ? row.GetColumn(paramID) : null; }
bool GUIDataRowSetData(DataRow dr, DataField df, Field fld)
virtual bool SetQueryParamText(int paramID, char * value);
virtual bool SetQueryParamObject(int paramID, void * data, Class type);
virtual char * GetColumn(int paramID);
+ virtual bool BindQueryData(int paramID, Field fld, typed_object value);
};
public class SQLCustomFunction