myext.pp 1019 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. library myext;
  2. {$mode objfpc}{$h+}
  3. uses
  4. sysutils,
  5. ctypes,
  6. sqlite3,
  7. sqlite3ext;
  8. procedure mysum(ctx: psqlite3_context; n: cint; v: ppsqlite3_value); cdecl;
  9. var
  10. a, b, r: cint;
  11. begin
  12. a := sqlite3_value_int(v[0]);
  13. b := sqlite3_value_int(v[1]);
  14. r := a + b;
  15. sqlite3_result_int(ctx, r);
  16. end;
  17. procedure myconcat(ctx: psqlite3_context; n: cint; v: ppsqlite3_value); cdecl;
  18. var
  19. a, b, r: ansistring;
  20. begin
  21. a := sqlite3_value_text(v[0]);
  22. b := sqlite3_value_text(v[1]);
  23. r := a + b;
  24. sqlite3_result_text(ctx, @r[1], length(r), nil);
  25. end;
  26. function sqlite3_extension_init(db: Psqlite3; pzErrMsg: Ppcchar;
  27. const pApi: Psqlite3_api_routines): cint; cdecl; export;
  28. var
  29. rc: cint;
  30. begin
  31. SQLITE_EXTENSION_INIT2(pApi);
  32. rc := sqlite3_create_function(db, 'mysum', 2, SQLITE_UTF8, nil,
  33. @mysum, nil, nil);
  34. if rc = SQLITE_OK then
  35. Result := sqlite3_create_function(db, 'myconcat', 2, SQLITE_UTF8, nil,
  36. @myconcat, nil, nil);
  37. Result := rc;
  38. end;
  39. exports
  40. sqlite3_extension_init;
  41. begin
  42. end.