; BlitzUtility - Expanding the normal Blitz functionality. ; Copyright (C) 2015 Xaymar (Michael Fabian Dirks) ; ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU Lesser General Public License as ; published by the Free Software Foundation, either version 3 of the ; License, or (at your option) any later version. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU Lesser General Public License ; along with this program. If not, see . ; Utility ---------------------------------------------------------------------- ;-- Types Const BU_TYPES_COMPARE_INEQUAL = 0 Const BU_TYPES_COMPARE_EQUAL = 1 Const BU_TYPES_COMPARE_SMALLER = 2 Const BU_TYPES_COMPARE_GREATER = 4 ;-- Mass Operation ; Constants: Supported Types Const BU_MASSOP_TYPE_DOUBLE = 0 Const BU_MASSOP_TYPE_LONGLONG = 1 Const BU_MASSOP_TYPE_VECTOR2 = 10 Const BU_MASSOP_TYPE_VECTOR3 = 11 ; Constants: Supported OpCodes Const BU_MASSOP_OPCODE_CREATE = 0 Const BU_MASSOP_OPCODE_DESTROY = 1 Const BU_MASSOP_OPCODE_COPY = 2 Const BU_MASSOP_OPCODE_TEMPCREATE = 5 Const BU_MASSOP_OPCODE_TEMPDESTROY = 6 Const BU_MASSOP_OPCODE_TEMPCLEANUP = 7 Const BU_MASSOP_OPCODE_SET = 10 Const BU_MASSOP_OPCODE_ADD = 11 Const BU_MASSOP_OPCODE_SUB = 12 Const BU_MASSOP_OPCODE_MUL = 13 Const BU_MASSOP_OPCODE_DIV = 14 Const BU_MASSOP_OPCODE_COMPARE = 15 ; GoTo ; leftOperand: new massop index Const BU_MASSOP_OPCODE_GOTO = 249 ; SetOpCode ; leftOperand: target massop index ; rightOperand: new OpCode Const BU_MASSOP_OPCODE_SETOPCODE = 250 ; CopyLeft ; leftOperand: source massop index ; rightOperand: target massop index ; result: target position (0/leftOperand, 1/rightOperand, 2/result) Const BU_MASSOP_OPCODE_COPYLEFT = 251 ; CopyRight ; leftOperand: source massop index ; rightOperand: target massop index ; result: target position (0/leftOperand, 1/rightOperand, 2/result) Const BU_MASSOP_OPCODE_COPYRIGHT = 252 ; CopyOut ; leftOperand: source massop index ; rightOperand: target massop index ; result: target position (0/leftOperand, 1/rightOperand, 2/result) Const BU_MASSOP_OPCODE_COPYOUT = 253 ; If - Compares the result of with the result of , ; skipping over instructions if the results match. ; leftOperand: source massop index ; rightOperand: target massop index ; result: amount to skip Const BU_MASSOP_OPCODE_IF = 254 ; IfValue - Compares the result of with , skipping ; over instructions if the results match. ; leftOperand: source massop index ; rightOperand: target massop index ; result: amount to skip Const BU_MASSOP_OPCODE_IFVALUE = 255 ; Helpers ---------------------------------------------------------------------- Type BU_Point Field X,Y End Type Type BU_Rectangle Field X,Y,X2,Y2 End Type Function BU_Helper_Window_LockPointer(HWND% = 0) If HWND = 0 Then BU_User32_ClipCursor(0) Else Local tRect.BU_Rectangle = New BU_Rectangle ; Retrieve Information about the selected window. BU_User32_GetWindowRect(HWND, tRect) ; Correct Rectangle to be inside the selected Window. tRect\X2=tRect\X2-1 tRect\Y2=tRect\Y2-1 ; Update clipping area. BU_User32_ClipCursor(tRect) Delete tRect EndIf End Function Function BU_Helper_Window_LockPointerAuto(HWND=0) If BU_User32_GetActiveWindow() = HWND Then BU_Helper_Window_LockPointer(HWND) Else BU_Helper_Window_LockPointer(0) EndIf End Function Function BU_Helper_Window_MakeBorderless(HWND=0) If HWND = 0 Then HWND = SystemProperty("AppHwnd") ; Create Storage Local tRect.BU_Rectangle = New BU_Rectangle ; Client Information BU_User32_GetClientRect(HWND, tRect) Local clientX, clientY, clientW, clientH clientX = tRect\X clientY = tRect\Y clientW = tRect\X2 - clientX clientH = tRect\Y2 - clientY ; Convert Client coordinates to screen position. Local tPoint.BU_Point = New BU_Point BU_User32_ClientToScreen(HWND, tPoint) Local realClientX, realClientY realClientX = tPoint\X realClientY = tPoint\Y Delete tPoint ; Window Information BU_User32_GetWindowRect(HWND, tRect) Local windowX, windowY, windowW, windowH windowX = tRect\X windowY = tRect\Y windowW = tRect\X2 - windowX windowH = tRect\Y2 - windowY ; Delete Storage Delete tRect ; Calculate new position and size. Local newX, newY, newW, newH newX = windowX + (realClientX - windowX) newY = windowY + (realClientY - windowY) newW = clientW newH = clientH ; Apply changes BU_User32_SetWindowLong HWND, -16, $01000000 BU_User32_SetWindowPos HWND, 0, newX, newY, newW, newH, $4 + $10 + $20 + $40 End Function Function BU_Helper_Window_Center(HWND=0, Monitor=0) Local displayEnumerator = BU_DisplayEnumerator_Create() Local displayAmount = BU_DisplayEnumerator_Enumerate(displayEnumerator) If Monitor >= displayAmount Then Monitor = displayAmount - 1 If Monitor < 0 Then Monitor = 0 ; Get Display Information Local displayRectangle.BU_Rectangle = New BU_Rectangle BU_DisplayEnumerator_Retrieve displayEnumerator, Monitor, displayRectangle BU_DisplayEnumerator_Destroy displayEnumerator Local displayX, displayY, displayW, displayH displayX = displayRectangle\X displayY = displayRectangle\Y displayW = displayRectangle\X2 - displayRectangle\X displayH = displayRectangle\Y2 - displayRectangle\Y Delete displayRectangle ; Get Window Information Local windowRectangle.BU_Rectangle = New BU_Rectangle BU_User32_GetWindowRect(HWND, windowRectangle) Local windowW%, windowH% windowW = windowRectangle\X2 - windowRectangle\X windowH = windowRectangle\Y2 - windowRectangle\Y Delete windowRectangle ; Calculate new position and size. Local newX, newY, newW, newH newX = displayX + (displayW/2 - windowW/2) newY = displayY + (displayH/2 - windowH/2) newW = windowW newH = windowH ; Apply changes BU_User32_SetWindowPos HWND, 0, newX, newY, newW, newH, $1 + $4 + $10 + $20 + $40 End Function Function BU_Helper_Window_Fill(HWND=0, Monitor=0) Local displayEnumerator = BU_DisplayEnumerator_Create() Local displayAmount = BU_DisplayEnumerator_Enumerate(displayEnumerator) If Monitor >= displayAmount Then Monitor = displayAmount - 1 If Monitor < 0 Then Monitor = 0 ; Get Display Information Local displayRectangle.BU_Rectangle = New BU_Rectangle BU_DisplayEnumerator_Retrieve displayEnumerator, Monitor, displayRectangle BU_DisplayEnumerator_Destroy displayEnumerator Local displayX, displayY, displayW, displayH displayX = displayRectangle\X displayY = displayRectangle\Y displayW = displayRectangle\X2 - displayRectangle\X displayH = displayRectangle\Y2 - displayRectangle\Y Delete displayRectangle ; Calculate new position and size. Local newX, newY, newW, newH newX = displayX newY = displayY newW = displayW newH = displayH ; Apply changes BU_User32_SetWindowPos HWND, 0, newX, newY, newW, newH, $4 + $10 + $20 + $40 End Function ; Database --------------------------------------------------------------------- ;-- SQLite3 ;[Block] Return Codes / Error Codes ; Many SQLite functions return an integer result code from the set shown ; here in order to indicate success or failure. ; ; New error codes may be added in future versions of SQLite. Const BU_SQLITE_OK% = 0 ; Successful result Const BU_SQLITE_ERROR% = 1 ; SQL error or missing database Const BU_SQLITE_INTERNAL% = 2 ; Internal logic error in SQLite Const BU_SQLITE_PERM% = 3 ; Access permission denied Const BU_SQLITE_ABORT% = 4 ; Callback routine requested an abort Const BU_SQLITE_BUSY% = 5 ; The database file is locked Const BU_SQLITE_LOCKED% = 6 ; A table in the database is locked Const BU_SQLITE_NOMEM% = 7 ; A malloc() failed Const BU_SQLITE_READONLY% = 8 ; Attempt to write a readonly database Const BU_SQLITE_INTERRUPT% = 9 ; Operation terminated by SQLite3_Interrupt() Const BU_SQLITE_IOERR% = 10 ; Some kind of disk I/O error occurred Const BU_SQLITE_CORRUPT% = 11 ; The database disk image is malformed Const BU_SQLITE_NOTFOUND% = 12 ; Unknown opcode in sqlite3_file_control() Const BU_SQLITE_FULL% = 13 ; Insertion failed because database is full Const BU_SQLITE_CANTOPEN% = 14 ; Unable to open the database file Const BU_SQLITE_PROTOCOL% = 15 ; Database lock protocol error Const BU_SQLITE_EMPTY% = 16 ; Database is empty Const BU_SQLITE_SCHEMA% = 17 ; The database schema changed Const BU_SQLITE_TOOBIG% = 18 ; String or BLOB exceeds size limit Const BU_SQLITE_CONSTRAINT% = 19 ; Abort due to constraint violation Const BU_SQLITE_MISMATCH% = 20 ; Data type mismatch Const BU_SQLITE_MISUSE% = 21 ; Library used incorrectly Const BU_SQLITE_NOLFS% = 22 ; Uses OS features not supported on host Const BU_SQLITE_AUTH% = 23 ; Authorization denied Const BU_SQLITE_FORMAT% = 24 ; Auxiliary database format error Const BU_SQLITE_RANGE% = 25 ; 2nd parameter to sqlite3_bind out of range Const BU_SQLITE_NOTADB% = 26 ; File opened that is not a database file Const BU_SQLITE_NOTICE% = 27 ; Notifications from sqlite3_log() Const BU_SQLITE_WARNING% = 28 ; Warnings from sqlite3_log() Const BU_SQLITE_ROW% = 100 ; sqlite3_step() has another row ready Const BU_SQLITE_DONE% = 101 ; sqlite3_step() has finished executing ;[End Block] ;[Block] Extended Result Codes ; In its default configuration, SQLite API routines return one of 30 integer ; [result codes]. However, experience has shown that many of ; these result codes are too coarse-grained. They do not provide as ; much information about problems as programmers might like. In an effort to ; address this, newer versions of SQLite (version 3.3.8 and later) include ; support for additional result codes that provide more detailed information ; about errors. These [extended result codes] are enabled or disabled ; on a per database connection basis using the [sqlite3_extended_result_codes()] ; API. Or, the extended code for the most recent error can be obtained using ; [sqlite3_extended_errcode()]. Const BU_SQLITE_IOERR_READ = (BU_SQLITE_IOERR Or (1 Shl 8)) Const BU_SQLITE_IOERR_SHORT_READ = (BU_SQLITE_IOERR Or (2 Shl 8)) Const BU_SQLITE_IOERR_WRITE = (BU_SQLITE_IOERR Or (3 Shl 8)) Const BU_SQLITE_IOERR_FSYNC = (BU_SQLITE_IOERR Or (4 Shl 8)) Const BU_SQLITE_IOERR_DIR_FSYNC = (BU_SQLITE_IOERR Or (5 Shl 8)) Const BU_SQLITE_IOERR_TRUNCATE = (BU_SQLITE_IOERR Or (6 Shl 8)) Const BU_SQLITE_IOERR_FSTAT = (BU_SQLITE_IOERR Or (7 Shl 8)) Const BU_SQLITE_IOERR_UNLOCK = (BU_SQLITE_IOERR Or (8 Shl 8)) Const BU_SQLITE_IOERR_RDLOCK = (BU_SQLITE_IOERR Or (9 Shl 8)) Const BU_SQLITE_IOERR_DELETE = (BU_SQLITE_IOERR Or (10 Shl 8)) Const BU_SQLITE_IOERR_BLOCKED = (BU_SQLITE_IOERR Or (11 Shl 8)) Const BU_SQLITE_IOERR_NOMEM = (BU_SQLITE_IOERR Or (12 Shl 8)) Const BU_SQLITE_IOERR_ACCESS = (BU_SQLITE_IOERR Or (13 Shl 8)) Const BU_SQLITE_IOERR_CHECKRESERVEDLOCK = (BU_SQLITE_IOERR Or (14 Shl 8)) Const BU_SQLITE_IOERR_LOCK = (BU_SQLITE_IOERR Or (15 Shl 8)) Const BU_SQLITE_IOERR_CLOSE = (BU_SQLITE_IOERR Or (16 Shl 8)) Const BU_SQLITE_IOERR_DIR_CLOSE = (BU_SQLITE_IOERR Or (17 Shl 8)) Const BU_SQLITE_IOERR_SHMOPEN = (BU_SQLITE_IOERR Or (18 Shl 8)) Const BU_SQLITE_IOERR_SHMSIZE = (BU_SQLITE_IOERR Or (19 Shl 8)) Const BU_SQLITE_IOERR_SHMLOCK = (BU_SQLITE_IOERR Or (20 Shl 8)) Const BU_SQLITE_IOERR_SHMMAP = (BU_SQLITE_IOERR Or (21 Shl 8)) Const BU_SQLITE_IOERR_SEEK = (BU_SQLITE_IOERR Or (22 Shl 8)) Const BU_SQLITE_IOERR_DELETE_NOENT = (BU_SQLITE_IOERR Or (23 Shl 8)) Const BU_SQLITE_IOERR_MMAP = (BU_SQLITE_IOERR Or (24 Shl 8)) Const BU_SQLITE_IOERR_GETTEMPPATH = (BU_SQLITE_IOERR Or (25 Shl 8)) Const BU_SQLITE_IOERR_CONVPATH = (BU_SQLITE_IOERR Or (26 Shl 8)) Const BU_SQLITE_IOERR_VNODE = (BU_SQLITE_IOERR Or (27 Shl 8)) Const BU_SQLITE_IOERR_AUTH = (BU_SQLITE_IOERR Or (28 Shl 8)) Const BU_SQLITE_LOCKED_SHAREDCACHE = (BU_SQLITE_LOCKED Or (1 Shl 8)) Const BU_SQLITE_BUSY_RECOVERY = (BU_SQLITE_BUSY Or (1 Shl 8)) Const BU_SQLITE_BUSY_SNAPSHOT = (BU_SQLITE_BUSY Or (2 Shl 8)) Const BU_SQLITE_CANTOPEN_NOTEMPDIR = (BU_SQLITE_CANTOPEN Or (1 Shl 8)) Const BU_SQLITE_CANTOPEN_ISDIR = (BU_SQLITE_CANTOPEN Or (2 Shl 8)) Const BU_SQLITE_CANTOPEN_FULLPATH = (BU_SQLITE_CANTOPEN Or (3 Shl 8)) Const BU_SQLITE_CANTOPEN_CONVPATH = (BU_SQLITE_CANTOPEN Or (4 Shl 8)) Const BU_SQLITE_CORRUPT_VTAB = (BU_SQLITE_CORRUPT Or (1 Shl 8)) Const BU_SQLITE_READONLY_RECOVERY = (BU_SQLITE_READONLY Or (1 Shl 8)) Const BU_SQLITE_READONLY_CANTLOCK = (BU_SQLITE_READONLY Or (2 Shl 8)) Const BU_SQLITE_READONLY_ROLLBACK = (BU_SQLITE_READONLY Or (3 Shl 8)) Const BU_SQLITE_READONLY_DBMOVED = (BU_SQLITE_READONLY Or (4 Shl 8)) Const BU_SQLITE_ABORT_ROLLBACK = (BU_SQLITE_ABORT Or (2 Shl 8)) Const BU_SQLITE_CONSTRAINT_CHECK = (BU_SQLITE_CONSTRAINT Or (1 Shl 8)) Const BU_SQLITE_CONSTRAINT_COMMITHOOK = (BU_SQLITE_CONSTRAINT Or (2 Shl 8)) Const BU_SQLITE_CONSTRAINT_FOREIGNKEY = (BU_SQLITE_CONSTRAINT Or (3 Shl 8)) Const BU_SQLITE_CONSTRAINT_FUNCTION = (BU_SQLITE_CONSTRAINT Or (4 Shl 8)) Const BU_SQLITE_CONSTRAINT_NOTNULL = (BU_SQLITE_CONSTRAINT Or (5 Shl 8)) Const BU_SQLITE_CONSTRAINT_PRIMARYKEY = (BU_SQLITE_CONSTRAINT Or (6 Shl 8)) Const BU_SQLITE_CONSTRAINT_TRIGGER = (BU_SQLITE_CONSTRAINT Or (7 Shl 8)) Const BU_SQLITE_CONSTRAINT_UNIQUE = (BU_SQLITE_CONSTRAINT Or (8 Shl 8)) Const BU_SQLITE_CONSTRAINT_VTAB = (BU_SQLITE_CONSTRAINT Or (9 Shl 8)) Const BU_SQLITE_CONSTRAINT_ROWID = (BU_SQLITE_CONSTRAINT Or (10 Shl 8)) Const BU_SQLITE_NOTICE_RECOVER_WAL = (BU_SQLITE_NOTICE Or (1 Shl 8)) Const BU_SQLITE_NOTICE_RECOVER_ROLLBACK = (BU_SQLITE_NOTICE Or (2 Shl 8)) Const BU_SQLITE_WARNING_AUTOINDEX = (BU_SQLITE_WARNING Or (1 Shl 8)) Const BU_SQLITE_AUTH_USER = (BU_SQLITE_AUTH Or (1 Shl 8)) ;[End Block] ;[Block] Flags For File Open Operations ; These bit values are intended for use in the ; 3rd parameter to the [sqlite3_open_v2()] interface. Const BU_SQLITE_OPEN_READONLY = $00000001 ; Ok for sqlite3_open_v2() */ Const BU_SQLITE_OPEN_READWRITE = $00000002 ; Ok for sqlite3_open_v2() */ Const BU_SQLITE_OPEN_CREATE = $00000004 ; Ok for sqlite3_open_v2() */ Const BU_SQLITE_OPEN_DELETEONCLOSE = $00000008 ; VFS only */ Const BU_SQLITE_OPEN_EXCLUSIVE = $00000010 ; VFS only */ Const BU_SQLITE_OPEN_AUTOPROXY = $00000020 ; VFS only */ Const BU_SQLITE_OPEN_URI = $00000040 ; Ok for sqlite3_open_v2() */ Const BU_SQLITE_OPEN_MEMORY = $00000080 ; Ok for sqlite3_open_v2() */ Const BU_SQLITE_OPEN_MAIN_DB = $00000100 ; VFS only */ Const BU_SQLITE_OPEN_TEMP_DB = $00000200 ; VFS only */ Const BU_SQLITE_OPEN_TRANSIENT_DB = $00000400 ; VFS only */ Const BU_SQLITE_OPEN_MAIN_JOURNAL = $00000800 ; VFS only */ Const BU_SQLITE_OPEN_TEMP_JOURNAL = $00001000 ; VFS only */ Const BU_SQLITE_OPEN_SUBJOURNAL = $00002000 ; VFS only */ Const BU_SQLITE_OPEN_MASTER_JOURNAL = $00004000 ; VFS only */ Const BU_SQLITE_OPEN_NOMUTEX = $00008000 ; Ok for sqlite3_open_v2() */ Const BU_SQLITE_OPEN_FULLMUTEX = $00010000 ; Ok for sqlite3_open_v2() */ Const BU_SQLITE_OPEN_SHAREDCACHE = $00020000 ; Ok for sqlite3_open_v2() */ Const BU_SQLITE_OPEN_PRIVATECACHE = $00040000 ; Ok for sqlite3_open_v2() */ Const BU_SQLITE_OPEN_WAL = $00080000 ; VFS only */ ;[End Block] ;[Block] Authorizer Return Codes ; The [sqlite3_set_authorizer | authorizer callback function] must ; return either [SQLITE_OK] or one of these two constants in order ; to signal SQLite whether or not the action is permitted. See the ; [sqlite3_set_authorizer | authorizer documentation] for additional ; information. ; ; Note that SQLITE_IGNORE is also used as a [conflict resolution mode] ; returned from the [sqlite3_vtab_on_conflict()] interface. Const BU_SQLITE_DENY = 1 ; Abort the SQL statement with an error */ Const BU_SQLITE_IGNORE = 2 ; Don't allow access, but don't generate an error */ ;[End Block] ;[Block] Authorizer Action Codes ; The [sqlite3_set_authorizer()] interface registers a callback function ; that is invoked to authorize certain SQL statement actions. The ; second parameter to the callback is an integer code that specifies ; what action is being authorized. These are the integer action codes that ; the authorizer callback may be passed. ; ; These action code values signify what kind of operation is to be ; authorized. The 3rd and 4th parameters to the authorization ; callback function will be parameters or NULL depending on which of these ; codes is used as the second parameter. ^(The 5th parameter to the ; authorizer callback is the name of the database ("main", "temp", ; etc.) if applicable.)^ ^The 6th parameter to the authorizer callback ; is the name of the inner-most trigger or view that is responsible for ; the access attempt or NULL if this access attempt is directly from ; top-level SQL code. ; ;;;;;;;;;;;;;;;;;;;;; 3rd ;;;;;; 4th ;;;;;*/ Const BU_SQLITE_CREATE_INDEX = 1 ; Index Name Table Name */ Const BU_SQLITE_CREATE_TABLE = 2 ; Table Name NULL */ Const BU_SQLITE_CREATE_TEMP_INDEX = 3 ; Index Name Table Name */ Const BU_SQLITE_CREATE_TEMP_TABLE = 4 ; Table Name NULL */ Const BU_SQLITE_CREATE_TEMP_TRIGGER = 5 ; Trigger Name Table Name */ Const BU_SQLITE_CREATE_TEMP_VIEW = 6 ; View Name NULL */ Const BU_SQLITE_CREATE_TRIGGER = 7 ; Trigger Name Table Name */ Const BU_SQLITE_CREATE_VIEW = 8 ; View Name NULL */ Const BU_SQLITE_DELETE = 9 ; Table Name NULL */ Const BU_SQLITE_DROP_INDEX = 10 ; Index Name Table Name */ Const BU_SQLITE_DROP_TABLE = 11 ; Table Name NULL */ Const BU_SQLITE_DROP_TEMP_INDEX = 12 ; Index Name Table Name */ Const BU_SQLITE_DROP_TEMP_TABLE = 13 ; Table Name NULL */ Const BU_SQLITE_DROP_TEMP_TRIGGER = 14 ; Trigger Name Table Name */ Const BU_SQLITE_DROP_TEMP_VIEW = 15 ; View Name NULL */ Const BU_SQLITE_DROP_TRIGGER = 16 ; Trigger Name Table Name */ Const BU_SQLITE_DROP_VIEW = 17 ; View Name NULL */ Const BU_SQLITE_INSERT = 18 ; Table Name NULL */ Const BU_SQLITE_PRAGMA = 19 ; Pragma Name 1st arg or NULL */ Const BU_SQLITE_READ = 20 ; Table Name Column Name */ Const BU_SQLITE_SELECT = 21 ; NULL NULL */ Const BU_SQLITE_TRANSACTION = 22 ; Operation NULL */ Const BU_SQLITE_UPDATE = 23 ; Table Name Column Name */ Const BU_SQLITE_ATTACH = 24 ; Filename NULL */ Const BU_SQLITE_DETACH = 25 ; Database Name NULL */ Const BU_SQLITE_ALTER_TABLE = 26 ; Database Name Table Name */ Const BU_SQLITE_REINDEX = 27 ; Index Name NULL */ Const BU_SQLITE_ANALYZE = 28 ; Table Name NULL */ Const BU_SQLITE_CREATE_VTABLE = 29 ; Table Name Module Name */ Const BU_SQLITE_DROP_VTABLE = 30 ; Table Name Module Name */ Const BU_SQLITE_FUNCTION = 31 ; NULL Function Name */ Const BU_SQLITE_SAVEPOINT = 32 ; Operation Savepoint Name */ Const BU_SQLITE_COPY = 0 ; No longer used */ Const BU_SQLITE_RECURSIVE = 33 ; NULL NULL */ ;[End Block] ;[Block] Run-Time Limit Categories ; KEYWORDS: {limit category} {*limit categories} ; ; These constants define various performance limits ; that can be lowered at run-time using [sqlite3_limit()]. ; The synopsis of the meanings of the various limits is shown below. ; Additional information is available at [limits | Limits in SQLite]. ; ;
; [[SQLITE_LIMIT_LENGTH]] ^(
SQLITE_LIMIT_LENGTH
;
The maximum size of any string or BLOB or table row, in bytes.
)^ ; ; [[SQLITE_LIMIT_SQL_LENGTH]] ^(
SQLITE_LIMIT_SQL_LENGTH
;
The maximum length of an SQL statement, in bytes.
)^ ; ; [[SQLITE_LIMIT_COLUMN]] ^(
SQLITE_LIMIT_COLUMN
;
The maximum number of columns in a table definition or in the ; result set of a [SELECT] or the maximum number of columns in an index ; or in an ORDER BY or GROUP BY clause.
)^ ; ; [[SQLITE_LIMIT_EXPR_DEPTH]] ^(
SQLITE_LIMIT_EXPR_DEPTH
;
The maximum depth of the parse tree on any expression.
)^ ; ; [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(
SQLITE_LIMIT_COMPOUND_SELECT
;
The maximum number of terms in a compound SELECT statement.
)^ ; ; [[SQLITE_LIMIT_VDBE_OP]] ^(
SQLITE_LIMIT_VDBE_OP
;
The maximum number of instructions in a virtual machine program ; used to implement an SQL statement. This limit is not currently ; enforced, though that might be added in some future release of ; SQLite.
)^ ; ; [[SQLITE_LIMIT_FUNCTION_ARG]] ^(
SQLITE_LIMIT_FUNCTION_ARG
;
The maximum number of arguments on a function.
)^ ; ; [[SQLITE_LIMIT_ATTACHED]] ^(
SQLITE_LIMIT_ATTACHED
;
The maximum number of [ATTACH | attached databases].)^
; ; [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]] ; ^(
SQLITE_LIMIT_LIKE_PATTERN_LENGTH
;
The maximum length of the pattern argument to the [LIKE] or ; [GLOB] operators.
)^ ; ; [[SQLITE_LIMIT_VARIABLE_NUMBER]] ; ^(
SQLITE_LIMIT_VARIABLE_NUMBER
;
The maximum index number of any [parameter] in an SQL statement.)^ ; ; [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(
SQLITE_LIMIT_TRIGGER_DEPTH
;
The maximum depth of recursion for triggers.
)^ ; ; [[SQLITE_LIMIT_WORKER_THREADS]] ^(
SQLITE_LIMIT_WORKER_THREADS
;
The maximum number of auxiliary worker threads that a single ; [prepared statement] may start.
)^ ;
Const BU_SQLITE_LIMIT_LENGTH = 0 Const BU_SQLITE_LIMIT_SQL_LENGTH = 1 Const BU_SQLITE_LIMIT_COLUMN = 2 Const BU_SQLITE_LIMIT_EXPR_DEPTH = 3 Const BU_SQLITE_LIMIT_COMPOUND_SELECT = 4 Const BU_SQLITE_LIMIT_VDBE_OP = 5 Const BU_SQLITE_LIMIT_FUNCTION_ARG = 6 Const BU_SQLITE_LIMIT_ATTACHED = 7 Const BU_SQLITE_LIMIT_LIKE_PATTERN_LENGTH = 8 Const BU_SQLITE_LIMIT_VARIABLE_NUMBER = 9 Const BU_SQLITE_LIMIT_TRIGGER_DEPTH = 10 Const BU_SQLITE_LIMIT_WORKER_THREADS = 11 ;[End Block] ;[Block] Column Type Const BU_SQLITE_UNKNOWN = 0 Const BU_SQLITE_INTEGER = 1 Const BU_SQLITE_REAL = 2 Const BU_SQLITE_FLOAT = 2 Const BU_SQLITE_DOUBLE = 2 Const BU_SQLITE_TEXT = 3 Const BU_SQLITE_STRING = 3 Const BU_SQLITE_BLOB = 4 Const BU_SQLITE_BANK = 4 Const BU_SQLITE_NULL = 5 ;[End Block] ; Math ------------------------------------------------------------------------- ;-- Vector2 Type Vector2 Field X#, Y# End Type Function Vector2_Create.Vector2(X#, Y#) Local vec.Vector2 = New Vector2 vec\X = X vec\Y = Y Return vec End Function ;-- Vector3 Type Vector3 Field X#, Y#, Z# End Type Function Vector3_Create.Vector3(X#, Y#, Z#) Local vec.Vector3 = New Vector3 vec\X = X vec\Y = Y vec\Z = Z Return vec End Function ;~IDEal Editor Parameters: ;~C#Blitz3D