{ UDF Sqlite3 support v1.0.0 translation to Pascal by Lukas Gebauer This is experimental translation. Be patient! } unit sqlite3udf; interface uses sqlite3; type Psqlite3_context = pointer; Psqlite3_value = ppchar; TxFunc = procedure(sqlite3_context: Psqlite3_context; cArg: integer; ArgV: Psqlite3_value); TxStep = procedure(sqlite3_context: Psqlite3_context; cArg: integer; ArgV: Psqlite3_value); TxFinal = procedure(sqlite3_context: Psqlite3_context); { void (*xFunc)(sqlite3_context*,int,sqlite3_value**), void (*xStep)(sqlite3_context*,int,sqlite3_value**), void (*xFinal)(sqlite3_context*) } //UDF SQLITE3 support function sqlite3_create_function(db: TSQLiteDB; functionName: PChar; nArg: integer; eTextRep: integer; pUserdata: pointer; xFunc: TxFunc; xStep: TxStep; xFinal: TxFinal ): integer; cdecl; external SQLiteDLL name 'sqlite3_create_function'; procedure sqlite3_result_blob(sqlite3_context: Psqlite3_context; value: Pointer; n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_blob'; procedure sqlite3_result_double(sqlite3_context: Psqlite3_context; value: Double); cdecl; external SQLiteDLL name 'sqlite3_result_double'; procedure sqlite3_result_error(sqlite3_context: Psqlite3_context; value: Pchar; n: integer); cdecl; external SQLiteDLL name 'sqlite3_result_error'; procedure sqlite3_result_error16(sqlite3_context: Psqlite3_context; value: PWidechar; n: integer); cdecl; external SQLiteDLL name 'sqlite3_result_error16'; procedure sqlite3_result_int(sqlite3_context: Psqlite3_context; value: integer); cdecl; external SQLiteDLL name 'sqlite3_result_int'; procedure sqlite3_result_int64(sqlite3_context: Psqlite3_context; value: int64); cdecl; external SQLiteDLL name 'sqlite3_result_int64'; procedure sqlite3_result_null(sqlite3_context: Psqlite3_context); cdecl; external SQLiteDLL name 'sqlite3_result_null'; procedure sqlite3_result_text(sqlite3_context: Psqlite3_context; value: PChar; n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_text'; procedure sqlite3_result_text16(sqlite3_context: Psqlite3_context; value: PWideChar; n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_text16'; procedure sqlite3_result_text16be(sqlite3_context: Psqlite3_context; value: PWideChar; n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_text16be'; procedure sqlite3_result_text16le(sqlite3_context: Psqlite3_context; value: PWideChar; n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_text16le'; procedure sqlite3_result_value(sqlite3_context: Psqlite3_context; value: Psqlite3_value); cdecl; external SQLiteDLL name 'sqlite3_result_value'; { void sqlite3_result_blob(sqlite3_context*, const void*, int n, void(*)(void*)); void sqlite3_result_double(sqlite3_context*, double); void sqlite3_result_error(sqlite3_context*, const char*, int); void sqlite3_result_error16(sqlite3_context*, const void*, int); void sqlite3_result_int(sqlite3_context*, int); void sqlite3_result_int64(sqlite3_context*, long long int); void sqlite3_result_null(sqlite3_context*); void sqlite3_result_text(sqlite3_context*, const char*, int n, void(*)(void*)); void sqlite3_result_text16(sqlite3_context*, const void*, int n, void(*)(void*)); void sqlite3_result_text16be(sqlite3_context*, const void*, int n, void(*)(void*)); void sqlite3_result_text16le(sqlite3_context*, const void*, int n, void(*)(void*)); void sqlite3_result_value(sqlite3_context*, sqlite3_value*); } function sqlite3_value_blob(value: pointer): Pointer; cdecl; external SQLiteDLL name 'sqlite3_value_blob'; function sqlite3_value_bytes(value: pointer): integer; cdecl; external SQLiteDLL name 'sqlite3_value_bytes'; function sqlite3_value_bytes16(value: pointer): integer; cdecl; external SQLiteDLL name 'sqlite3_value_bytes16'; function sqlite3_value_double(value: pointer): double; cdecl; external SQLiteDLL name 'sqlite3_value_double'; function sqlite3_value_int(value: pointer): integer; cdecl; external SQLiteDLL name 'sqlite3_value_int'; function sqlite3_value_int64(value: pointer): int64; cdecl; external SQLiteDLL name 'sqlite3_value_int64'; function sqlite3_value_text(value: pointer): PChar; cdecl; external SQLiteDLL name 'sqlite3_value_text'; function sqlite3_value_text16(value: pointer): PWideChar; cdecl; external SQLiteDLL name 'sqlite3_value_text16'; function sqlite3_value_text16be(value: pointer): PWideChar; cdecl; external SQLiteDLL name 'sqlite3_value_text16be'; function sqlite3_value_text16le(value: pointer): PWideChar; cdecl; external SQLiteDLL name 'sqlite3_value_text16le'; function sqlite3_value_type(value: pointer): integer; cdecl; external SQLiteDLL name 'sqlite3_value_type'; { const void *sqlite3_value_blob(sqlite3_value*); int sqlite3_value_bytes(sqlite3_value*); int sqlite3_value_bytes16(sqlite3_value*); double sqlite3_value_double(sqlite3_value*); int sqlite3_value_int(sqlite3_value*); long long int sqlite3_value_int64(sqlite3_value*); const unsigned char *sqlite3_value_text(sqlite3_value*); const void *sqlite3_value_text16(sqlite3_value*); const void *sqlite3_value_text16be(sqlite3_value*); const void *sqlite3_value_text16le(sqlite3_value*); int sqlite3_value_type(sqlite3_value*); } { //Sample of usage: PROCEDURE fn(ctx:pointer;n:integer;args:ppchar);cdecl; VAR p : ppchar; theString : string; res:integer; BEGIN p := args; theString := trim(sqlite3_value_text(p^)); ...do something with theString... sqlite3_result_int(ctx,res); // < return a number based on string END; ... var i:integer; begin i := sqlite3_create_function(db3,'myfn',1,SQLITE_UTF8,nil,@fn,nil,nil); s := 'select myfn(thestring) from theTable;' ...execute statement... end; } implementation end.