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