// ignore_for_file: type=lint
// AUTO GENERATED FILE, DO NOT EDIT.
//
// Generated by `package:ffigen`.
import 'dart:ffi' as ffi;

final class sqlite3_char extends ffi.Opaque {}

final class sqlite3 extends ffi.Opaque {}

final class sqlite3_stmt extends ffi.Opaque {}

final class sqlite3_backup extends ffi.Opaque {}

final class sqlite3_api_routines extends ffi.Opaque {}

final class sqlite3_value extends ffi.Opaque {}

final class sqlite3_context extends ffi.Opaque {}

final class sqlite3_io_methods extends ffi.Struct {
  @ffi.Int()
  external int iVersion;

  external ffi
      .Pointer<ffi.NativeFunction<ffi.Int Function(ffi.Pointer<sqlite3_file>)>>
      xClose;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(ffi.Pointer<sqlite3_file>, ffi.Pointer<ffi.Void>,
              ffi.Int, ffi.Int64)>> xRead;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(ffi.Pointer<sqlite3_file>, ffi.Pointer<ffi.Void>,
              ffi.Int, ffi.Int64)>> xWrite;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(ffi.Pointer<sqlite3_file>, ffi.Int64)>> xTruncate;

  external ffi.Pointer<
          ffi
          .NativeFunction<ffi.Int Function(ffi.Pointer<sqlite3_file>, ffi.Int)>>
      xSync;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(
              ffi.Pointer<sqlite3_file>, ffi.Pointer<ffi.Int64>)>> xFileSize;

  external ffi.Pointer<
          ffi
          .NativeFunction<ffi.Int Function(ffi.Pointer<sqlite3_file>, ffi.Int)>>
      xLock;

  external ffi.Pointer<
          ffi
          .NativeFunction<ffi.Int Function(ffi.Pointer<sqlite3_file>, ffi.Int)>>
      xUnlock;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Int Function(
                  ffi.Pointer<sqlite3_file>, ffi.Pointer<ffi.Int>)>>
      xCheckReservedLock;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Int Function(
                  ffi.Pointer<sqlite3_file>, ffi.Int, ffi.Pointer<ffi.Void>)>>
      xFileControl;

  external ffi
      .Pointer<ffi.NativeFunction<ffi.Int Function(ffi.Pointer<sqlite3_file>)>>
      xSectorSize;

  external ffi
      .Pointer<ffi.NativeFunction<ffi.Int Function(ffi.Pointer<sqlite3_file>)>>
      xDeviceCharacteristics;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(ffi.Pointer<sqlite3_file>, ffi.Int, ffi.Int, ffi.Int,
              ffi.Pointer<ffi.Pointer<ffi.Void>>)>> xShmMap;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(
              ffi.Pointer<sqlite3_file>, ffi.Int, ffi.Int, ffi.Int)>> xShmLock;

  external ffi
      .Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<sqlite3_file>)>>
      xShmBarrier;

  external ffi.Pointer<
          ffi
          .NativeFunction<ffi.Int Function(ffi.Pointer<sqlite3_file>, ffi.Int)>>
      xShmUnmap;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(ffi.Pointer<sqlite3_file>, ffi.Int64, ffi.Int,
              ffi.Pointer<ffi.Pointer<ffi.Void>>)>> xFetch;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Int Function(
                  ffi.Pointer<sqlite3_file>, ffi.Int64, ffi.Pointer<ffi.Void>)>>
      xUnfetch;
}

final class sqlite3_file extends ffi.Struct {
  external ffi.Pointer<sqlite3_io_methods> pMethods;
}

final class sqlite3_vfs extends ffi.Struct {
  @ffi.Int()
  external int iVersion;

  @ffi.Int()
  external int szOsFile;

  @ffi.Int()
  external int mxPathname;

  external ffi.Pointer<sqlite3_vfs> pNext;

  external ffi.Pointer<ffi.Char> zName;

  external ffi.Pointer<ffi.Void> pAppData;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Char>,
              ffi.Pointer<sqlite3_file>, ffi.Int, ffi.Pointer<ffi.Int>)>> xOpen;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Int Function(
                  ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Char>, ffi.Int)>>
      xDelete;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Char>,
              ffi.Int, ffi.Pointer<ffi.Int>)>> xAccess;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Char>,
              ffi.Int, ffi.Pointer<ffi.Char>)>> xFullPathname;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Pointer<ffi.Void> Function(
              ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Char>)>> xDlOpen;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Void Function(
                  ffi.Pointer<sqlite3_vfs>, ffi.Int, ffi.Pointer<ffi.Char>)>>
      xDlError;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> Function(
              ffi.Pointer<sqlite3_vfs>,
              ffi.Pointer<ffi.Void>,
              ffi.Pointer<ffi.Char>)>> xDlSym;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Void Function(
              ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Void>)>> xDlClose;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Int Function(
                  ffi.Pointer<sqlite3_vfs>, ffi.Int, ffi.Pointer<ffi.Char>)>>
      xRandomness;

  external ffi.Pointer<
          ffi
          .NativeFunction<ffi.Int Function(ffi.Pointer<sqlite3_vfs>, ffi.Int)>>
      xSleep;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Int Function(
              ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Double>)>> xCurrentTime;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Int Function(
                  ffi.Pointer<sqlite3_vfs>, ffi.Int, ffi.Pointer<ffi.Char>)>>
      xGetLastError;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Int Function(
                  ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Int64>)>>
      xCurrentTimeInt64;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Int Function(ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Char>,
                  ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>)>>
      xSetSystemCall;

  external ffi.Pointer<
      ffi.NativeFunction<
          ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> Function(
              ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Char>)>> xGetSystemCall;

  external ffi.Pointer<
          ffi.NativeFunction<
              ffi.Pointer<ffi.Char> Function(
                  ffi.Pointer<sqlite3_vfs>, ffi.Pointer<ffi.Char>)>>
      xNextSystemCall;
}

abstract interface class SqliteLibrary {
  ffi.Pointer<sqlite3_char> get sqlite3_temp_directory;
  set sqlite3_temp_directory(ffi.Pointer<sqlite3_char> value);
  int sqlite3_initialize();
  int sqlite3_open_v2(
      ffi.Pointer<sqlite3_char> filename,
      ffi.Pointer<ffi.Pointer<sqlite3>> ppDb,
      int flags,
      ffi.Pointer<sqlite3_char> zVfs);
  int sqlite3_close_v2(ffi.Pointer<sqlite3> db);
  ffi.Pointer<sqlite3_char> sqlite3_db_filename(
      ffi.Pointer<sqlite3> db, ffi.Pointer<sqlite3_char> zDbName);
  ffi.Pointer<sqlite3_char> sqlite3_compileoption_get(int N);
  int sqlite3_extended_result_codes(ffi.Pointer<sqlite3> db, int onoff);
  int sqlite3_extended_errcode(ffi.Pointer<sqlite3> db);
  ffi.Pointer<sqlite3_char> sqlite3_errmsg(ffi.Pointer<sqlite3> db);
  ffi.Pointer<sqlite3_char> sqlite3_errstr(int code);
  int sqlite3_error_offset(ffi.Pointer<sqlite3> db);
  void sqlite3_free(ffi.Pointer<ffi.Void> ptr);
  ffi.Pointer<sqlite3_char> sqlite3_libversion();
  ffi.Pointer<sqlite3_char> sqlite3_sourceid();
  int sqlite3_libversion_number();
  int sqlite3_last_insert_rowid(ffi.Pointer<sqlite3> db);
  int sqlite3_changes(ffi.Pointer<sqlite3> db);
  int sqlite3_exec(
      ffi.Pointer<sqlite3> db,
      ffi.Pointer<sqlite3_char> sql,
      ffi.Pointer<ffi.Void> callback,
      ffi.Pointer<ffi.Void> argToCb,
      ffi.Pointer<ffi.Pointer<sqlite3_char>> errorOut);
  ffi.Pointer<ffi.Void> sqlite3_update_hook(
      ffi.Pointer<sqlite3> arg0,
      ffi.Pointer<
              ffi.NativeFunction<
                  ffi.Void Function(
                      ffi.Pointer<ffi.Void>,
                      ffi.Int,
                      ffi.Pointer<sqlite3_char>,
                      ffi.Pointer<sqlite3_char>,
                      ffi.Int64)>>
          arg1,
      ffi.Pointer<ffi.Void> arg2);
  ffi.Pointer<ffi.Void> sqlite3_commit_hook(
      ffi.Pointer<sqlite3> arg0,
      ffi.Pointer<ffi.NativeFunction<ffi.Int Function(ffi.Pointer<ffi.Void>)>>
          arg1,
      ffi.Pointer<ffi.Void> arg2);
  ffi.Pointer<ffi.Void> sqlite3_rollback_hook(
      ffi.Pointer<sqlite3> arg0,
      ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>
          arg1,
      ffi.Pointer<ffi.Void> arg2);
  int sqlite3_get_autocommit(ffi.Pointer<sqlite3> db);
  int sqlite3_prepare_v2(
      ffi.Pointer<sqlite3> db,
      ffi.Pointer<sqlite3_char> zSql,
      int nByte,
      ffi.Pointer<ffi.Pointer<sqlite3_stmt>> ppStmt,
      ffi.Pointer<ffi.Pointer<sqlite3_char>> pzTail);
  int sqlite3_prepare_v3(
      ffi.Pointer<sqlite3> db,
      ffi.Pointer<sqlite3_char> zSql,
      int nByte,
      int prepFlags,
      ffi.Pointer<ffi.Pointer<sqlite3_stmt>> ppStmt,
      ffi.Pointer<ffi.Pointer<sqlite3_char>> pzTail);
  int sqlite3_finalize(ffi.Pointer<sqlite3_stmt> pStmt);
  int sqlite3_step(ffi.Pointer<sqlite3_stmt> pStmt);
  int sqlite3_reset(ffi.Pointer<sqlite3_stmt> pStmt);
  int sqlite3_stmt_isexplain(ffi.Pointer<sqlite3_stmt> pStmt);
  int sqlite3_stmt_readonly(ffi.Pointer<sqlite3_stmt> pStmt);
  int sqlite3_column_count(ffi.Pointer<sqlite3_stmt> pStmt);
  int sqlite3_bind_parameter_count(ffi.Pointer<sqlite3_stmt> pStmt);
  int sqlite3_bind_parameter_index(
      ffi.Pointer<sqlite3_stmt> arg0, ffi.Pointer<sqlite3_char> zName);
  ffi.Pointer<sqlite3_char> sqlite3_column_name(
      ffi.Pointer<sqlite3_stmt> pStmt, int N);
  ffi.Pointer<sqlite3_char> sqlite3_column_table_name(
      ffi.Pointer<sqlite3_stmt> pStmt, int N);
  int sqlite3_bind_blob64(ffi.Pointer<sqlite3_stmt> pStmt, int index,
      ffi.Pointer<ffi.Void> data, int length, ffi.Pointer<ffi.Void> destructor);
  int sqlite3_bind_double(
      ffi.Pointer<sqlite3_stmt> pStmt, int index, double data);
  int sqlite3_bind_int64(ffi.Pointer<sqlite3_stmt> pStmt, int index, int data);
  int sqlite3_bind_null(ffi.Pointer<sqlite3_stmt> pStmt, int index);
  int sqlite3_bind_text(
      ffi.Pointer<sqlite3_stmt> pStmt,
      int index,
      ffi.Pointer<sqlite3_char> data,
      int length,
      ffi.Pointer<ffi.Void> destructor);
  ffi.Pointer<ffi.Void> sqlite3_column_blob(
      ffi.Pointer<sqlite3_stmt> pStmt, int iCol);
  double sqlite3_column_double(ffi.Pointer<sqlite3_stmt> pStmt, int iCol);
  int sqlite3_column_int64(ffi.Pointer<sqlite3_stmt> pStmt, int iCol);
  ffi.Pointer<sqlite3_char> sqlite3_column_text(
      ffi.Pointer<sqlite3_stmt> pStmt, int iCol);
  int sqlite3_column_bytes(ffi.Pointer<sqlite3_stmt> pStmt, int iCol);
  int sqlite3_column_type(ffi.Pointer<sqlite3_stmt> pStmt, int iCol);
  ffi.Pointer<ffi.Void> sqlite3_value_blob(ffi.Pointer<sqlite3_value> value);
  double sqlite3_value_double(ffi.Pointer<sqlite3_value> value);
  int sqlite3_value_type(ffi.Pointer<sqlite3_value> value);
  int sqlite3_value_int64(ffi.Pointer<sqlite3_value> value);
  ffi.Pointer<sqlite3_char> sqlite3_value_text(
      ffi.Pointer<sqlite3_value> value);
  int sqlite3_value_bytes(ffi.Pointer<sqlite3_value> value);
  int sqlite3_create_function_v2(
      ffi.Pointer<sqlite3> db,
      ffi.Pointer<sqlite3_char> zFunctionName,
      int nArg,
      int eTextRep,
      ffi.Pointer<ffi.Void> pApp,
      ffi.Pointer<
              ffi.NativeFunction<
                  ffi.Void Function(ffi.Pointer<sqlite3_context>, ffi.Int,
                      ffi.Pointer<ffi.Pointer<sqlite3_value>>)>>
          xFunc,
      ffi.Pointer<
              ffi.NativeFunction<
                  ffi.Void Function(ffi.Pointer<sqlite3_context>, ffi.Int,
                      ffi.Pointer<ffi.Pointer<sqlite3_value>>)>>
          xStep,
      ffi.Pointer<
              ffi
              .NativeFunction<ffi.Void Function(ffi.Pointer<sqlite3_context>)>>
          xFinal,
      ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>
          xDestroy);
  int sqlite3_create_window_function(
      ffi.Pointer<sqlite3> db,
      ffi.Pointer<sqlite3_char> zFunctionName,
      int nArg,
      int eTextRep,
      ffi.Pointer<ffi.Void> pApp,
      ffi.Pointer<
              ffi.NativeFunction<
                  ffi.Void Function(ffi.Pointer<sqlite3_context>, ffi.Int,
                      ffi.Pointer<ffi.Pointer<sqlite3_value>>)>>
          xStep,
      ffi.Pointer<
              ffi
              .NativeFunction<ffi.Void Function(ffi.Pointer<sqlite3_context>)>>
          xFinal,
      ffi.Pointer<
              ffi
              .NativeFunction<ffi.Void Function(ffi.Pointer<sqlite3_context>)>>
          xValue,
      ffi.Pointer<
              ffi.NativeFunction<
                  ffi.Void Function(ffi.Pointer<sqlite3_context>, ffi.Int,
                      ffi.Pointer<ffi.Pointer<sqlite3_value>>)>>
          xInverse,
      ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>
          xDestroy);
  ffi.Pointer<ffi.Void> sqlite3_aggregate_context(
      ffi.Pointer<sqlite3_context> ctx, int nBytes);
  ffi.Pointer<ffi.Void> sqlite3_user_data(ffi.Pointer<sqlite3_context> ctx);
  void sqlite3_result_blob64(ffi.Pointer<sqlite3_context> ctx,
      ffi.Pointer<ffi.Void> data, int length, ffi.Pointer<ffi.Void> destructor);
  void sqlite3_result_double(ffi.Pointer<sqlite3_context> ctx, double result);
  void sqlite3_result_error(ffi.Pointer<sqlite3_context> ctx,
      ffi.Pointer<sqlite3_char> msg, int length);
  void sqlite3_result_int64(ffi.Pointer<sqlite3_context> ctx, int result);
  void sqlite3_result_null(ffi.Pointer<sqlite3_context> ctx);
  void sqlite3_result_text(
      ffi.Pointer<sqlite3_context> ctx,
      ffi.Pointer<sqlite3_char> data,
      int length,
      ffi.Pointer<ffi.Void> destructor);
  int sqlite3_create_collation_v2(
      ffi.Pointer<sqlite3> arg0,
      ffi.Pointer<sqlite3_char> zName,
      int eTextRep,
      ffi.Pointer<ffi.Void> pArg,
      ffi.Pointer<
              ffi.NativeFunction<
                  ffi.Int Function(ffi.Pointer<ffi.Void>, ffi.Int,
                      ffi.Pointer<ffi.Void>, ffi.Int, ffi.Pointer<ffi.Void>)>>
          xCompare,
      ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>>
          xDestroy);
  ffi.Pointer<sqlite3_backup> sqlite3_backup_init(
      ffi.Pointer<sqlite3> pDestDb,
      ffi.Pointer<sqlite3_char> zDestDb,
      ffi.Pointer<sqlite3> pSrcDb,
      ffi.Pointer<sqlite3_char> zSrcDb);
  int sqlite3_backup_step(ffi.Pointer<sqlite3_backup> p, int nPage);
  int sqlite3_backup_finish(ffi.Pointer<sqlite3_backup> p);
  int sqlite3_backup_remaining(ffi.Pointer<sqlite3_backup> p);
  int sqlite3_backup_pagecount(ffi.Pointer<sqlite3_backup> p);
  int sqlite3_auto_extension(ffi.Pointer<ffi.Void> xEntryPoint);
  int sqlite3_db_config(
      ffi.Pointer<sqlite3> db, int op, int va, ffi.Pointer<ffi.Int> va1);
  int sqlite3_vfs_register(ffi.Pointer<sqlite3_vfs> arg0, int makeDflt);
  int sqlite3_vfs_unregister(ffi.Pointer<sqlite3_vfs> arg0);
}
