From 868daf94f29ce1ffdd799a68c07bb668cd373bcd Mon Sep 17 00:00:00 2001 From: HP\李良庭 <liliangting@lanpucloud.cn:1111> Date: 星期二, 08 七月 2025 11:49:03 +0800 Subject: [PATCH] 提交分辨率自适应版本V3.1.0.1500 --- src/sqlite3/sqlite3udf.pas | 131 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 131 insertions(+), 0 deletions(-) diff --git a/src/sqlite3/sqlite3udf.pas b/src/sqlite3/sqlite3udf.pas new file mode 100644 index 0000000..90d4544 --- /dev/null +++ b/src/sqlite3/sqlite3udf.pas @@ -0,0 +1,131 @@ +{ +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. -- Gitblit v1.9.3