USING: alien alien.libraries alien.strings alien.syntax alien.c-types kernel combinators ; IN: odbc.ffi << "odbc" "odbc32.dll" "stdcall" add-library >> LIBRARY: odbc TYPEDEF: void* usb_dev_handle* TYPEDEF: short SQLRETURN TYPEDEF: short SQLSMALLINT TYPEDEF: short* SQLSMALLINT* TYPEDEF: ushort SQLUSMALLINT TYPEDEF: uint* SQLUINTEGER* TYPEDEF: int SQLINTEGER TYPEDEF: char SQLCHAR TYPEDEF: char* SQLCHAR* TYPEDEF: void* SQLHANDLE TYPEDEF: void* SQLHANDLE* TYPEDEF: void* SQLHENV TYPEDEF: void* SQLHDBC TYPEDEF: void* SQLHSTMT TYPEDEF: void* SQLHWND TYPEDEF: void* SQLPOINTER : SQL-HANDLE-ENV ( -- number ) 1 ; inline : SQL-HANDLE-DBC ( -- number ) 2 ; inline : SQL-HANDLE-STMT ( -- number ) 3 ; inline : SQL-HANDLE-DESC ( -- number ) 4 ; inline : SQL-NULL-HANDLE ( -- alien ) f ; inline : SQL-ATTR-ODBC-VERSION ( -- number ) 200 ; inline : SQL-OV-ODBC2 ( -- number ) 2 ; inline : SQL-OV-ODBC3 ( -- number ) 3 ; inline : SQL-SUCCESS ( -- number ) 0 ; inline : SQL-SUCCESS-WITH-INFO ( -- number ) 1 ; inline : SQL-NO-DATA-FOUND ( -- number ) 100 ; inline : SQL-DRIVER-NOPROMPT ( -- number ) 0 ; inline : SQL-DRIVER-PROMPT ( -- number ) 2 ; inline : SQL-C-DEFAULT ( -- number ) 99 ; inline SYMBOL: SQL-CHAR SYMBOL: SQL-VARCHAR SYMBOL: SQL-LONGVARCHAR SYMBOL: SQL-WCHAR SYMBOL: SQL-WCHARVAR SYMBOL: SQL-WLONGCHARVAR SYMBOL: SQL-DECIMAL SYMBOL: SQL-SMALLINT SYMBOL: SQL-NUMERIC SYMBOL: SQL-INTEGER SYMBOL: SQL-REAL SYMBOL: SQL-FLOAT SYMBOL: SQL-DOUBLE SYMBOL: SQL-BIT SYMBOL: SQL-TINYINT SYMBOL: SQL-BIGINT SYMBOL: SQL-BINARY SYMBOL: SQL-VARBINARY SYMBOL: SQL-LONGVARBINARY SYMBOL: SQL-TYPE-DATE SYMBOL: SQL-TYPE-TIME SYMBOL: SQL-TYPE-TIMESTAMP SYMBOL: SQL-TYPE-UTCDATETIME SYMBOL: SQL-TYPE-UTCTIME SYMBOL: SQL-INTERVAL-MONTH SYMBOL: SQL-INTERVAL-YEAR SYMBOL: SQL-INTERVAL-YEAR-TO-MONTH SYMBOL: SQL-INTERVAL-DAY SYMBOL: SQL-INTERVAL-HOUR SYMBOL: SQL-INTERVAL-MINUTE SYMBOL: SQL-INTERVAL-SECOND SYMBOL: SQL-INTERVAL-DAY-TO-HOUR SYMBOL: SQL-INTERVAL-DAY-TO-MINUTE SYMBOL: SQL-INTERVAL-DAY-TO-SECOND SYMBOL: SQL-INTERVAL-HOUR-TO-MINUTE SYMBOL: SQL-INTERVAL-HOUR-TO-SECOND SYMBOL: SQL-INTERVAL-MINUTE-TO-SECOND SYMBOL: SQL-GUID SYMBOL: SQL-TYPE-UNKNOWN SYMBOL: SQL-MONEY : convert-sql-type ( number -- symbol ) { { 1 [ SQL-CHAR ] } { 12 [ SQL-VARCHAR ] } { -1 [ SQL-LONGVARCHAR ] } { -8 [ SQL-WCHAR ] } { -9 [ SQL-WCHARVAR ] } { -10 [ SQL-WLONGCHARVAR ] } { 3 [ SQL-DECIMAL ] } { 5 [ SQL-SMALLINT ] } { 2 [ SQL-NUMERIC ] } { 4 [ SQL-INTEGER ] } { 7 [ SQL-REAL ] } { 6 [ SQL-FLOAT ] } { 8 [ SQL-DOUBLE ] } { -7 [ SQL-BIT ] } { -6 [ SQL-TINYINT ] } { -5 [ SQL-BIGINT ] } { -2 [ SQL-BINARY ] } { -3 [ SQL-VARBINARY ] } { -4 [ SQL-LONGVARBINARY ] } { 91 [ SQL-TYPE-DATE ] } { 92 [ SQL-TYPE-TIME ] } { 93 [ SQL-TYPE-TIMESTAMP ] } [ drop SQL-TYPE-UNKNOWN ] } case ; : succeeded? ( n -- bool ) #! Did the call succeed (SQL-SUCCESS or SQL-SUCCESS-WITH-INFO) { { SQL-SUCCESS [ t ] } { SQL-SUCCESS-WITH-INFO [ t ] } [ drop f ] } case ; FUNCTION: SQLRETURN SQLAllocHandle ( SQLSMALLINT handleType, SQLHANDLE inputHandle, SQLHANDLE* outputHandlePtr ) ; FUNCTION: SQLRETURN SQLSetEnvAttr ( SQLHENV environmentHandle, SQLINTEGER attribute, SQLPOINTER valuePtr, SQLINTEGER stringLength ) ; FUNCTION: SQLRETURN SQLDriverConnect ( SQLHDBC connectionHandle, SQLHWND windowHandle, SQLCHAR* inConnectionString, SQLSMALLINT stringLength, SQLCHAR* outConnectionString, SQLSMALLINT bufferLength, SQLSMALLINT* stringLength2Ptr, SQLUSMALLINT driverCompletion ) ; FUNCTION: SQLRETURN SQLDisconnect ( SQLHDBC connectionHandle ) ; FUNCTION: SQLRETURN SQLPrepare ( SQLHSTMT statementHandle, SQLCHAR* statementText, SQLINTEGER length ) ; FUNCTION: SQLRETURN SQLExecute ( SQLHSTMT statementHandle ) ; FUNCTION: SQLRETURN SQLFreeHandle ( SQLSMALLINT handleType, SQLHANDLE handle ) ; FUNCTION: SQLRETURN SQLFetch ( SQLHSTMT statementHandle ) ; FUNCTION: SQLRETURN SQLNumResultCols ( SQLHSTMT statementHandle, SQLSMALLINT* columnCountPtr ) ; FUNCTION: SQLRETURN SQLDescribeCol ( SQLHSTMT statementHandle, SQLSMALLINT columnNumber, SQLCHAR* columnName, SQLSMALLINT bufferLength, SQLSMALLINT* nameLengthPtr, SQLSMALLINT* dataTypePtr, SQLUINTEGER* columnSizePtr, SQLSMALLINT* decimalDigitsPtr, SQLSMALLINT* nullablePtr ) ; FUNCTION: SQLRETURN SQLGetData ( SQLHSTMT statementHandle, SQLUSMALLINT columnNumber, SQLSMALLINT targetType, SQLPOINTER targetValuePtr, SQLINTEGER bufferLength, SQLINTEGER* strlen_or_indPtr ) ;