diff --git a/scsh/odbc/generate-constants.scm b/scsh/odbc/generate-constants.scm new file mode 100644 index 0000000..278ffee --- /dev/null +++ b/scsh/odbc/generate-constants.scm @@ -0,0 +1,416 @@ +(define (pretty-print-constant str) + (string-map + (lambda (c) (if (char=? c #\_) #\- c)) + (string-downcase str))) + +(define (generate-print-func-dec c-name scheme-name type) + (format + (current-output-port) + "printf(\"(define ~A %d)\\n\", ~A);~%" scheme-name c-name)) + +(define (generate-print-func c-name scheme-name type) + (let ((real-scheme-name (or scheme-name + (pretty-print-constant c-name)))) + (cond ((equal? type 'dec) + (generate-print-func-dec c-name real-scheme-name type)) + (else + (error "don't know this type " type))))) + +(define (generate-comment str) + (format (current-output-port) + "printf(\"\\n\\n~A\\n\");~%" str)) + +(define (generate-constants const-list) + (map + (lambda (thing) + (cond ((string? thing) (generate-comment thing)) + ((list? thing) + (generate-print-func (car thing) (cadr thing) (caddr thing))) + (else + (error "Don't know what to do with this " thing)))) + const-list)) + +(define odbc-constants + '(";;; some return values" + ("SQL_NULL_DATA" #f dec) + ("SQL_DATA_AT_EXEC" #f dec) + ("SQL_SUCCESS" #f dec) + ("SQL_SUCCESS_WITH_INFO" #f dec) + ("SQL_NO_DATA" #f dec) + ("SQL_ERROR" #f dec) + ("SQL_INVALID_HANDLE" #f dec) + ("SQL_STILL_EXECUTING" #f dec) + ("SQL_NEED_DATA" #f dec) + + ";;; use these to indicate string termination to some function" + ("SQL_NTS" #f dec) + ("SQL_NTSL" #f dec) + + ";;; maximum message length" + ("SQL_MAX_MESSAGE_LENGTH" #f dec) + + ";;; date/time length constants" + ("SQL_DATE_LEN" #f dec) + ("SQL_TIME_LEN" #f dec) + ("SQL_TIMESTAMP_LEN" #f dec) + + ";;; handle type identifiers" + ("SQL_HANDLE_ENV" #f dec) + ("SQL_HANDLE_DBC" #f dec) + ("SQL_HANDLE_STMT" #f dec) + ("SQL_HANDLE_DESC" #f dec) + + ";;; environment attribute" + ("SQL_ATTR_OUTPUT_NTS" #f dec) + + ";;; connection attributes" + ("SQL_ATTR_AUTO_IPD" #f dec) + ("SQL_ATTR_METADATA_ID" #f dec) + + ";;; statement attributes" + ("SQL_ATTR_APP_ROW_DESC" #f dec) + ("SQL_ATTR_APP_PARAM_DESC" #f dec) + ("SQL_ATTR_IMP_ROW_DESC" #f dec) + ("SQL_ATTR_IMP_PARAM_DESC" #f dec) + ("SQL_ATTR_CURSOR_SCROLLABLE" #f dec) + ("SQL_ATTR_CURSOR_SENSITIVITY" #f dec) + ("SQL_NONSCROLLABLE" #f dec) + ("SQL_SCROLLABLE" #f dec) + + ";;; identifiers of fields in the SQL descriptor" + ("SQL_DESC_COUNT" #f dec) + ("SQL_DESC_TYPE" #f dec) + ("SQL_DESC_LENGTH" #f dec) + ("SQL_DESC_OCTET_LENGTH_PTR" #f dec) + ("SQL_DESC_PRECISION" #f dec) + ("SQL_DESC_SCALE" #f dec) + ("SQL_DESC_DATETIME_INTERVAL_CODE" #f dec) + ("SQL_DESC_NULLABLE" #f dec) + ("SQL_DESC_INDICATOR_PTR" #f dec) + ("SQL_DESC_DATA_PTR" #f dec) + ("SQL_DESC_NAME" #f dec) + ("SQL_DESC_UNNAMED" #f dec) + ("SQL_DESC_OCTET_LENGTH" #f dec) + ("SQL_DESC_ALLOC_TYPE" #f dec) + + ";;; identifiers of fields in the diagnostics area" + ("SQL_DIAG_RETURNCODE" #f dec) + ("SQL_DIAG_NUMBER" #f dec) + ("SQL_DIAG_ROW_COUNT" #f dec) + ("SQL_DIAG_SQLSTATE" #f dec) + ("SQL_DIAG_NATIVE" #f dec) + ("SQL_DIAG_MESSAGE_TEXT" #f dec) + ("SQL_DIAG_DYNAMIC_FUNCTION" #f dec) + ("SQL_DIAG_CLASS_ORIGIN" #f dec) + ("SQL_DIAG_SUBCLASS_ORIGIN" #f dec) + ("SQL_DIAG_CONNECTION_NAME" #f dec) + ("SQL_DIAG_SERVER_NAME" #f dec) + ("SQL_DIAG_DYNAMIC_FUNCTION_CODE" #f dec) + ("SQL_DIAG_ALTER_DOMAIN" #f dec) + ("SQL_DIAG_ALTER_TABLE" #f dec) + ("SQL_DIAG_CALL" #f dec) + ("SQL_DIAG_CREATE_ASSERTION" #f dec) + ("SQL_DIAG_CREATE_CHARACTER_SET" #f dec) + ("SQL_DIAG_CREATE_COLLATION" #f dec) + ("SQL_DIAG_CREATE_DOMAIN" #f dec) + ("SQL_DIAG_CREATE_INDEX" #f dec) + ("SQL_DIAG_CREATE_SCHEMA" #f dec) + ("SQL_DIAG_CREATE_TABLE" #f dec) + ("SQL_DIAG_CREATE_TRANSLATION" #f dec) + ("SQL_DIAG_CREATE_VIEW" #f dec) + ("SQL_DIAG_DELETE_WHERE" #f dec) + ("SQL_DIAG_DROP_ASSERTION" #f dec) + ("SQL_DIAG_DROP_CHARACTER_SET" #f dec) + ("SQL_DIAG_DROP_COLLATION" #f dec) + ("SQL_DIAG_DROP_DOMAIN" #f dec) + ("SQL_DIAG_DROP_INDEX" #f dec) + ("SQL_DIAG_DROP_SCHEMA" #f dec) + ("SQL_DIAG_DROP_TABLE" #f dec) + ("SQL_DIAG_DROP_TRANSLATION" #f dec) + ("SQL_DIAG_DROP_VIEW" #f dec) + ("SQL_DIAG_DYNAMIC_DELETE_CURSOR" #f dec) + ("SQL_DIAG_DYNAMIC_UPDATE_CURSOR" #f dec) + ("SQL_DIAG_GRANT" #f dec) + ("SQL_DIAG_INSERT" #f dec) + ("SQL_DIAG_REVOKE" #f dec) + ("SQL_DIAG_SELECT_CURSOR" #f dec) + ("SQL_DIAG_UNKNOWN_STATEMENT" #f dec) + ("SQL_DIAG_UPDATE_WHERE" #f dec) + + ";;; SQL data type codes" + ("SQL_UNKNOWN_TYPE" #f dec) + ("SQL_CHAR" #f dec) + ("SQL_NUMERIC" #f dec) + ("SQL_DECIMAL" #f dec) + ("SQL_INTEGER" #f dec) + ("SQL_SMALLINT" #f dec) + ("SQL_FLOAT" #f dec) + ("SQL_REAL" #f dec) + ("SQL_DOUBLE" #f dec) + ("SQL_DATETIME" #f dec) + ("SQL_VARCHAR" #f dec) + ("SQL_TYPE_DATE" #f dec) + ("SQL_TYPE_TIME" #f dec) + ("SQL_TYPE_TIMESTAMP" #f dec) + ("SQL_UNSPECIFIED" #f dec) + ("SQL_INSENSITIVE" #f dec) + ("SQL_SENSITIVE" #f dec) + + ("SQL_ALL_TYPES" #f dec) + ("SQL_DEFAULT" #f dec) + ("SQL_ARD_TYPE" #f dec) + ("SQL_CODE_DATE" #f dec) + ("SQL_CODE_TIME" #f dec) + ("SQL_CODE_TIMESTAMP" #f dec) + + ("SQL_FALSE" #f dec) + ("SQL_TRUE" #f dec) + + ("SQL_NO_NULLS" #f dec) + ("SQL_NULLABLE" #f dec) + ("SQL_NULLABLE_UNKNOWN" #f dec) + + ("SQL_PRED_NONE" #f dec) + ("SQL_PRED_CHAR" #f dec) + ("SQL_PRED_BASIC" #f dec) + + ("SQL_NAMED" #f dec) + ("SQL_UNNAMED" #f dec) + + ("SQL_DESC_ALLOC_AUTO" #f dec) + ("SQL_DESC_ALLOC_USER" #f dec) + + ("SQL_CLOSE" #f dec) + ("SQL_DROP" #f dec) + ("SQL_UNBIND" #f dec) + ("SQL_RESET_PARAMS" #f dec) + + ("SQL_FETCH_NEXT" #f dec) + ("SQL_FETCH_FIRST" #f dec) + + ("SQL_FETCH_LAST" #f dec) + ("SQL_FETCH_PRIOR" #f dec) + ("SQL_FETCH_ABSOLUTE" #f dec) + ("SQL_FETCH_RELATIVE" #f dec) + + ("SQL_COMMIT" #f dec) + ("SQL_ROLLBACK" #f dec) + + ("SQL_NULL_HENV" #f dec) + ("SQL_NULL_HDBC" #f dec) + ("SQL_NULL_HSTMT" #f dec) + ("SQL_NULL_HDESC" #f dec) + + ("SQL_NULL_HANDLE" #f dec) + + ("SQL_SCOPE_CURROW" #f dec) + ("SQL_SCOPE_TRANSACTION" #f dec) + ("SQL_SCOPE_SESSION" #f dec) + + ("SQL_PC_UNKNOWN" #f dec) + ("SQL_PC_NON_PSEUDO" #f dec) + ("SQL_PC_PSEUDO" #f dec) + + ("SQL_ROW_IDENTIFIER" #f dec) + + ("SQL_INDEX_UNIQUE" #f dec) + ("SQL_INDEX_ALL" #f dec) + ("SQL_INDEX_CLUSTERED" #f dec) + ("SQL_INDEX_HASHED" #f dec) + ("SQL_INDEX_OTHER" #f dec) + + ("SQL_API_SQLALLOCCONNECT" #f dec) + ("SQL_API_SQLALLOCENV" #f dec) + ("SQL_API_SQLALLOCHANDLE" #f dec) + ("SQL_API_SQLALLOCSTMT" #f dec) + ("SQL_API_SQLBINDCOL" #f dec) + ("SQL_API_SQLBINDPARAM" #f dec) + ("SQL_API_SQLCANCEL" #f dec) + ("SQL_API_SQLCLOSECURSOR" #f dec) + ("SQL_API_SQLCOLATTRIBUTE" #f dec) + ("SQL_API_SQLCOLUMNS" #f dec) + ("SQL_API_SQLCONNECT" #f dec) + ("SQL_API_SQLCOPYDESC" #f dec) + ("SQL_API_SQLDATASOURCES" #f dec) + ("SQL_API_SQLDESCRIBECOL" #f dec) + ("SQL_API_SQLDISCONNECT" #f dec) + ("SQL_API_SQLENDTRAN" #f dec) + ("SQL_API_SQLERROR" #f dec) + ("SQL_API_SQLEXECDIRECT" #f dec) + ("SQL_API_SQLEXECUTE" #f dec) + ("SQL_API_SQLFETCH" #f dec) + ("SQL_API_SQLFETCHSCROLL" #f dec) + ("SQL_API_SQLFREECONNECT" #f dec) + ("SQL_API_SQLFREEENV" #f dec) + ("SQL_API_SQLFREEHANDLE" #f dec) + ("SQL_API_SQLFREESTMT" #f dec) + ("SQL_API_SQLGETCONNECTATTR" #f dec) + ("SQL_API_SQLGETCURSORNAME" #f dec) + ("SQL_API_SQLGETDATA" #f dec) + ("SQL_API_SQLGETDESCFIELD" #f dec) + ("SQL_API_SQLGETDESCREC" #f dec) + ("SQL_API_SQLGETDIAGFIELD" #f dec) + ("SQL_API_SQLGETDIAGREC" #f dec) + ("SQL_API_SQLGETENVATTR" #f dec) + ("SQL_API_SQLGETFUNCTIONS" #f dec) + ("SQL_API_SQLGETINFO" #f dec) + ("SQL_API_SQLGETSTMTATTR" #f dec) + ("SQL_API_SQLGETSTMTOPTION" #f dec) + ("SQL_API_SQLGETTYPEINFO" #f dec) + ("SQL_API_SQLNUMRESULTCOLS" #f dec) + ("SQL_API_SQLPARAMDATA" #f dec) + ("SQL_API_SQLPREPARE" #f dec) + ("SQL_API_SQLPUTDATA" #f dec) + ("SQL_API_SQLROWCOUNT" #f dec) + ("SQL_API_SQLSETCONNECTATTR" #f dec) + ("SQL_API_SQLSETCONNECTOPTION" #f dec) + ("SQL_API_SQLSETCURSORNAME" #f dec) + ("SQL_API_SQLSETDESCFIELD" #f dec) + ("SQL_API_SQLSETDESCREC" #f dec) + ("SQL_API_SQLSETENVATTR" #f dec) + ("SQL_API_SQLSETPARAM" #f dec) + ("SQL_API_SQLSETSTMTATTR" #f dec) + ("SQL_API_SQLSETSTMTOPTION" #f dec) + ("SQL_API_SQLSPECIALCOLUMNS" #f dec) + ("SQL_API_SQLSTATISTICS" #f dec) + ("SQL_API_SQLTABLES" #f dec) + ("SQL_API_SQLTRANSACT" #f dec) + + ";;; Information requested by SQLGetInfo()" + ("SQL_MAX_DRIVER_CONNECTIONS" #f dec) + ("SQL_MAXIMUM_DRIVER_CONNECTIONS" #f dec) + ("SQL_MAX_CONCURRENT_ACTIVITIES" #f dec) + ("SQL_MAXIMUM_DRIVER_CONNECTIONS" #f dec) + ("SQL_DATA_SOURCE_NAME" #f dec) + ("SQL_FETCH_DIRECTION" #f dec) + ("SQL_SERVER_NAME" #f dec) + ("SQL_SEARCH_PATTERN_ESCAPE" #f dec) + ("SQL_DBMS_NAME" #f dec) + ("SQL_DBMS_VER" #f dec) + ("SQL_ACCESSIBLE_TABLES" #f dec) + ("SQL_ACCESSIBLE_PROCEDURES" #f dec) + ("SQL_CURSOR_COMMIT_BEHAVIOR" #f dec) + ("SQL_DATA_SOURCE_READ_ONLY" #f dec) + ("SQL_DEFAULT_TXN_ISOLATION" #f dec) + ("SQL_IDENTIFIER_CASE" #f dec) + ("SQL_IDENTIFIER_QUOTE_CHAR" #f dec) + ("SQL_MAX_COLUMN_NAME_LEN" #f dec) + ("SQL_MAXIMUM_COLUMN_NAME_LENGTH" #f dec) + ("SQL_MAX_CURSOR_NAME_LEN" #f dec) + ("SQL_MAXIMUM_CURSOR_NAME_LENGTH" #f dec) + ("SQL_MAX_SCHEMA_NAME_LEN" #f dec) + ("SQL_MAXIMUM_SCHEMA_NAME_LENGTH" #f dec) + ("SQL_MAX_CATALOG_NAME_LEN" #f dec) + ("SQL_MAXIMUM_CATALOG_NAME_LENGTH" #f dec) + ("SQL_MAX_TABLE_NAME_LEN" #f dec) + ("SQL_SCROLL_CONCURRENCY" #f dec) + ("SQL_TXN_CAPABLE" #f dec) + ("SQL_TRANSACTION_CAPABLE" #f dec) + ("SQL_USER_NAME" #f dec) + ("SQL_TXN_ISOLATION_OPTION" #f dec) + ("SQL_TRANSACTION_ISOLATION_OPTION" #f dec) + ("SQL_INTEGRITY" #f dec) + ("SQL_GETDATA_EXTENSIONS" #f dec) + ("SQL_NULL_COLLATION" #f dec) + ("SQL_ALTER_TABLE" #f dec) + ("SQL_ORDER_BY_COLUMNS_IN_SELECT" #f dec) + ("SQL_SPECIAL_CHARACTERS" #f dec) + ("SQL_MAX_COLUMNS_IN_GROUP_BY" #f dec) + ("SQL_MAXIMUM_COLUMNS_IN_GROUP_BY" #f dec) + ("SQL_MAX_COLUMNS_IN_INDEX" #f dec) + ("SQL_MAXIMUM_COLUMNS_IN_INDEX" #f dec) + ("SQL_MAX_COLUMNS_IN_ORDER_BY" #f dec) + ("SQL_MAXIMUM_COLUMNS_IN_ORDER_BY" #f dec) + ("SQL_MAX_COLUMNS_IN_SELECT" #f dec) + ("SQL_MAXIMUM_COLUMNS_IN_SELECT" #f dec) + ("SQL_MAX_COLUMNS_IN_TABLE" #f dec) + ("SQL_MAX_INDEX_SIZE" #f dec) + ("SQL_MAXIMUM_INDEX_SIZE" #f dec) + ("SQL_MAX_ROW_SIZE" #f dec) + ("SQL_MAXIMUM_ROW_SIZE" #f dec) + ("SQL_MAX_STATEMENT_LEN" #f dec) + ("SQL_MAXIMUM_STATEMENT_LENGTH" #f dec) + ("SQL_MAX_TABLES_IN_SELECT" #f dec) + ("SQL_MAXIMUM_TABLES_IN_SELECT" #f dec) + ("SQL_MAX_USER_NAME_LEN" #f dec) + ("SQL_MAXIMUM_USER_NAME_LENGTH" #f dec) + + ("SQL_OJ_CAPABILITIES" #f dec) + ("SQL_OUTER_JOIN_CAPABILITIES" #f dec) + ("SQL_XOPEN_CLI_YEAR" #f dec) + ("SQL_CURSOR_SENSITIVITY" #f dec) + ("SQL_DESCRIBE_PARAMETER" #f dec) + ("SQL_CATALOG_NAME" #f dec) + ("SQL_COLLATION_SEQ" #f dec) + ("SQL_MAX_IDENTIFIER_LEN" #f dec) + ("SQL_MAXIMUM_IDENTIFIER_LENGTH" #f dec) + + ("SQL_AT_ADD_COLUMN" #f dec) + ("SQL_AT_DROP_COLUMN" #f dec) + ("SQL_AT_ADD_CONSTRAINT" #f dec) + + ";;; SQL_ASYNC_MODE values" + ("SQL_AM_NONE" #f dec) + ("SQL_AM_CONNECTION" #f dec) + ("SQL_AM_STATEMENT" #f dec) + + ";;; SQL_CURSOR_COMMIT_BEHAVIOR values" + ("SQL_CB_DELETE" #f dec) + ("SQL_CB_CLOSE" #f dec) + ("SQL_CB_PRESERVE" #f dec) + + ";;; SQL_FETCH_DIRECTION bitmasks" + ("SQL_FD_FETCH_NEXT" #f dec) + ("SQL_FD_FETCH_FIRST" #f dec) + ("SQL_FD_FETCH_LAST" #f dec) + ("SQL_FD_FETCH_PRIOR" #f dec) + ("SQL_FD_FETCH_ABSOLUTE" #f dec) + ("SQL_FD_FETCH_RELATIVE" #f dec) + + ";;; SQL_GETDATA_EXTENSIONS bitmasks" + ("SQL_GD_ANY_COLUMN" #f dec) + ("SQL_GD_ANY_ORDER" #f dec) + + ";;; SQL_IDENTIFIER_CASE values" + ("SQL_IC_UPPER" #f dec) + ("SQL_IC_LOWER" #f dec) + ("SQL_IC_SENSITIVE" #f dec) + ("SQL_IC_MIXED" #f dec) + + ";;; SQL_OJ_CAPABILITIES bitmasks" + ("SQL_OJ_LEFT" #f dec) + ("SQL_OJ_RIGHT" #f dec) + ("SQL_OJ_FULL" #f dec) + ("SQL_OJ_NESTED" #f dec) + ("SQL_OJ_NOT_ORDERED" #f dec) + ("SQL_OJ_INNER" #f dec) + ("SQL_OJ_ALL_COMPARISON_OPS" #f dec) + + ("SQL_SCCO_READ_ONLY" #f dec) + ("SQL_SCCO_LOCK" #f dec) + ("SQL_SCCO_OPT_ROWVER" #f dec) + ("SQL_SCCO_OPT_VALUES" #f dec) + + ("SQL_TC_NONE" #f dec) + ("SQL_TC_DML" #f dec) + ("SQL_TC_ALL" #f dec) + ("SQL_TC_DDL_COMMIT" #f dec) + ("SQL_TC_DDL_IGNORE" #f dec) + + ("SQL_TXN_READ_UNCOMMITTED" #f dec) + ("SQL_TRANSACTION_READ_UNCOMMITTED" #f dec) + ("SQL_TXN_READ_UNCOMMITTED" #f dec) + ("SQL_TRANSACTION_READ_COMMITTED" #f dec) + ("SQL_TXN_REPEATABLE_READ" #f dec) + ("SQL_TRANSACTION_REPEATABLE_READ" #f dec) + ("SQL_TXN_SERIALIZABLE" #f dec) + ("SQL_TRANSACTION_SERIALIZABLE" #f dec) + + ("SQL_NC_HIGH" #f dec) + ("SQL_NC_LOW" #f dec))) + +(with-output-to-file "constants.c" + (lambda () + (generate-constants odbc-constants) + (close-output-port (current-output-port)))) + diff --git a/scsh/odbc/odbc-constants.c b/scsh/odbc/odbc-constants.c new file mode 100644 index 0000000..31227d7 --- /dev/null +++ b/scsh/odbc/odbc-constants.c @@ -0,0 +1,11 @@ +#include +#include + +int main(void) +{ + + /* do the trick */ +#include "constants.c" + + exit(0); +}