{"action":"created","comment":{"url":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/comments/32168024","id":32168024,"diff_hunk":"@@ -0,0 +1,1414 @@\n+/**\r\n+Declarations for interfacing with the ODBC library.\r\n+\r\n+Adapted with minimal changes from the work of David L. Davis\r\n+(refer to the $(WEB\r\n+forum.dlang.org/thread/cfk7ql$(DOLLAR)1p4n$(DOLLAR)1@digitaldaemon.com#post-cfk7ql:241p4n:241:40digitaldaemon.com,\r\n+original announcement)).\r\n+\r\n+`etc.c.odbc.sql` is the the main include for ODBC v3.0+ Core functions,\r\n+corresponding to the `sql.h` C header file. It `import`s `public`ly\r\n+`etc.c.odbc.sqltypes` for conformity with the C header.\r\n+\r\n+See_Also: $(LUCKY ODBC API Reference on MSN Online)\r\n+*/\r\n+\r\n+module etc.c.odbc.sql;\r\n+\r\n+public import etc.c.odbc.sqltypes;\r\n+\r\n+extern (Windows):\r\n+\r\n+// * special length/indicator values *\r\n+enum int SQL_NULL_DATA    = (-1);\r\n+enum int SQL_DATA_AT_EXEC = (-2);\r\n+\r\n+// * return values from functions *\r\n+enum\r\n+{\r\n+    SQL_SUCCESS           = 0,\r\n+    SQL_SUCCESS_WITH_INFO = 1,\r\n+    SQL_NO_DATA           = 100,\r\n+    SQL_ERROR             = (-1),\r\n+    SQL_INVALID_HANDLE    = (-2),\r\n+    SQL_STILL_EXECUTING   = 2,\r\n+    SQL_NEED_DATA         = 99\r\n+}\r\n+\r\n+/* test for SQL_SUCCESS or SQL_SUCCESS_WITH_INFO */\r\n+bool SQL_SUCCEEDED(uint rc) { return (rc & ~1U) == 0; }\r\n+\r\n+enum\r\n+{\r\n+    // * flags for null-terminated string *\r\n+    SQL_NTS                         = (-3),\r\n+    SQL_NTSL                        = (-3L),\r\n+\r\n+    // * maximum message length *\r\n+    SQL_MAX_MESSAGE_LENGTH          = 512,\r\n+\r\n+    // * date/time length constants *\r\n+    SQL_DATE_LEN                    = 10,\r\n+    SQL_TIME_LEN                    =  8,  /* add P+1 if precision is nonzero */\r\n+    SQL_TIMESTAMP_LEN               = 19,  /* add P+1 if precision is nonzero */\r\n+\r\n+    // * handle type identifiers *\r\n+    SQL_HANDLE_ENV                  = 1,\r\n+    SQL_HANDLE_DBC                  = 2,\r\n+    SQL_HANDLE_STMT                 = 3,\r\n+    SQL_HANDLE_DESC                 = 4,\r\n+\r\n+    // * environment attribute *\r\n+    SQL_ATTR_OUTPUT_NTS             = 10001,\r\n+\r\n+    // * connection attributes *\r\n+    SQL_ATTR_AUTO_IPD               = 10001,\r\n+    SQL_ATTR_METADATA_ID            = 10014,\r\n+\r\n+    // * statement attributes *\r\n+    SQL_ATTR_APP_ROW_DESC           = 10010,\r\n+    SQL_ATTR_APP_PARAM_DESC         = 10011,\r\n+    SQL_ATTR_IMP_ROW_DESC           = 10012,\r\n+    SQL_ATTR_IMP_PARAM_DESC         = 10013,\r\n+    SQL_ATTR_CURSOR_SCROLLABLE      = (-1),\r\n+    SQL_ATTR_CURSOR_SENSITIVITY     = (-2),\r\n+\r\n+    // * SQL_ATTR_CURSOR_SCROLLABLE values *\r\n+    SQL_NONSCROLLABLE               = 0,\r\n+    SQL_SCROLLABLE                  = 1,\r\n+\r\n+    // * identifiers of fields in the SQL descriptor *\r\n+    SQL_DESC_COUNT                  = 1001,\r\n+    SQL_DESC_TYPE                   = 1002,\r\n+    SQL_DESC_LENGTH                 = 1003,\r\n+    SQL_DESC_OCTET_LENGTH_PTR       = 1004,\r\n+    SQL_DESC_PRECISION              = 1005,\r\n+    SQL_DESC_SCALE                  = 1006,\r\n+    SQL_DESC_DATETIME_INTERVAL_CODE = 1007,\r\n+    SQL_DESC_NULLABLE               = 1008,\r\n+    SQL_DESC_INDICATOR_PTR          = 1009,\r\n+    SQL_DESC_DATA_PTR               = 1010,\r\n+    SQL_DESC_NAME                   = 1011,\r\n+    SQL_DESC_UNNAMED                = 1012,\r\n+    SQL_DESC_OCTET_LENGTH           = 1013,\r\n+    SQL_DESC_ALLOC_TYPE             = 1099\r\n+}\r\n+\r\n+// * identifiers of fields in the diagnostics area *\r\n+enum\r\n+{\r\n+    SQL_DIAG_RETURNCODE            = 1,\r\n+    SQL_DIAG_NUMBER                = 2,\r\n+    SQL_DIAG_ROW_COUNT             = 3,\r\n+    SQL_DIAG_SQLSTATE              = 4,\r\n+    SQL_DIAG_NATIVE                = 5,\r\n+    SQL_DIAG_MESSAGE_TEXT          = 6,\r\n+    SQL_DIAG_DYNAMIC_FUNCTION      = 7,\r\n+    SQL_DIAG_CLASS_ORIGIN          = 8,\r\n+    SQL_DIAG_SUBCLASS_ORIGIN       = 9,\r\n+    SQL_DIAG_CONNECTION_NAME       = 10,\r\n+    SQL_DIAG_SERVER_NAME           = 11,\r\n+    SQL_DIAG_DYNAMIC_FUNCTION_CODE = 12\r\n+}\r\n+\r\n+// * dynamic function codes *\r\n+enum\r\n+{\r\n+    SQL_DIAG_ALTER_DOMAIN          = 3,\r\n+    SQL_DIAG_ALTER_TABLE           = 4,\r\n+    SQL_DIAG_CALL                  = 7,\r\n+    SQL_DIAG_CREATE_ASSERTION      = 6,\r\n+    SQL_DIAG_CREATE_CHARACTER_SET  = 8,\r\n+    SQL_DIAG_CREATE_COLLATION      = 10,\r\n+    SQL_DIAG_CREATE_DOMAIN         = 23,\r\n+    SQL_DIAG_CREATE_INDEX          = (-1),\r\n+    SQL_DIAG_CREATE_SCHEMA         = 64,\r\n+    SQL_DIAG_CREATE_TABLE          = 77,\r\n+    SQL_DIAG_CREATE_TRANSLATION    = 79,\r\n+    SQL_DIAG_CREATE_VIEW           = 84,\r\n+    SQL_DIAG_DELETE_WHERE          = 19,\r\n+    SQL_DIAG_DROP_ASSERTION        = 24,\r\n+    SQL_DIAG_DROP_CHARACTER_SET    = 25,\r\n+    SQL_DIAG_DROP_COLLATION        = 26,\r\n+    SQL_DIAG_DROP_DOMAIN           = 27,\r\n+    SQL_DIAG_DROP_INDEX            = (-2),\r\n+    SQL_DIAG_DROP_SCHEMA           = 31,\r\n+    SQL_DIAG_DROP_TABLE            = 32,\r\n+    SQL_DIAG_DROP_TRANSLATION      = 33,\r\n+    SQL_DIAG_DROP_VIEW             = 36,\r\n+    SQL_DIAG_DYNAMIC_DELETE_CURSOR = 38,\r\n+    SQL_DIAG_DYNAMIC_UPDATE_CURSOR = 81,\r\n+    SQL_DIAG_GRANT                 = 48,\r\n+    SQL_DIAG_INSERT                = 50,\r\n+    SQL_DIAG_REVOKE                = 59,\r\n+    SQL_DIAG_SELECT_CURSOR         = 85,\r\n+    SQL_DIAG_UNKNOWN_STATEMENT     = 0,\r\n+    SQL_DIAG_UPDATE_WHERE          = 82\r\n+}\r\n+\r\n+enum\r\n+{\r\n+    // * SQL data type codes *\r\n+    SQL_UNKNOWN_TYPE   = 0,\r\n+    SQL_CHAR           = 1,\r\n+    SQL_NUMERIC        = 2,\r\n+    SQL_DECIMAL        = 3,\r\n+    SQL_INTEGER        = 4,\r\n+    SQL_SMALLINT       = 5,\r\n+    SQL_FLOAT          = 6,\r\n+    SQL_REAL           = 7,\r\n+    SQL_DOUBLE         = 8,\r\n+    SQL_DATETIME       = 9,\r\n+    SQL_VARCHAR        = 12,\r\n+\r\n+    // * One-parameter shortcuts for date/time data types *\r\n+    SQL_TYPE_DATE      = 91,\r\n+    SQL_TYPE_TIME      = 92,\r\n+    SQL_TYPE_TIMESTAMP = 93\r\n+}\r\n+\r\n+// * Statement attribute values for cursor sensitivity *\r\n+enum\r\n+{\r\n+    SQL_UNSPECIFIED = 0,\r\n+    SQL_INSENSITIVE = 1,\r\n+    SQL_SENSITIVE   = 2\r\n+}\r\n+\r\n+// * GetTypeInfo() request for all data types *\r\n+enum\r\n+{\r\n+    SQL_ALL_TYPES = 0\r\n+}\r\n+\r\n+// * Default conversion code for SQLBindCol(), SQLBindParam() and SQLGetData() *\r\n+enum { SQL_DEFAULT = 99 }\r\n+\r\n+/+ SQLGetData() code indicating that the application row descriptor\r\n+ ' specifies the data type\r\n+ +/\r\n+enum\r\n+{\r\n+    SQL_ARD_TYPE = (-99)\r\n+}\r\n+\r\n+// * SQL date/time type subcodes *\r\n+enum\r\n+{\r\n+    SQL_CODE_DATE      = 1,\r\n+    SQL_CODE_TIME      = 2,\r\n+    SQL_CODE_TIMESTAMP = 3\r\n+}\r\n+\r\n+// * CLI option values *\r\n+enum\r\n+{\r\n+    SQL_FALSE = 0,\r\n+    SQL_TRUE  = 1\r\n+}\r\n+\r\n+// * values of NULLABLE field in descriptor *\r\n+enum\r\n+{\r\n+    SQL_NO_NULLS = 0,\r\n+    SQL_NULLABLE = 1\r\n+}\r\n+\r\n+/+ Value returned by SQLGetTypeInfo() to denote that it is\r\n+ ' not known whether or not a data type supports null values.\r\n+ +/\r\n+enum { SQL_NULLABLE_UNKNOWN = 2 }\r\n+\r\n+/+ Values returned by SQLGetTypeInfo() to show WHERE clause\r\n+ ' supported\r\n+ +/\r\n+enum\r\n+{\r\n+    SQL_PRED_NONE  = 0,\r\n+    SQL_PRED_CHAR  = 1,\r\n+    SQL_PRED_BASIC = 2\r\n+}\r\n+\r\n+// * values of UNNAMED field in descriptor *\r\n+enum\r\n+{\r\n+    SQL_NAMED   = 0,\r\n+    SQL_UNNAMED = 1\r\n+}\r\n+\r\n+// * values of ALLOC_TYPE field in descriptor *\r\n+enum\r\n+{\r\n+    SQL_DESC_ALLOC_AUTO = 1,\r\n+    SQL_DESC_ALLOC_USER = 2\r\n+}\r\n+\r\n+// * FreeStmt() options *\r\n+enum\r\n+{\r\n+    SQL_CLOSE        = 0,\r\n+    SQL_DROP         = 1,\r\n+    SQL_UNBIND       = 2,\r\n+    SQL_RESET_PARAMS = 3\r\n+}\r\n+\r\n+// * Codes used for FetchOrientation in SQLFetchScroll(), and in SQLDataSources() *\r\n+enum\r\n+{\r\n+    SQL_FETCH_NEXT  = 1,\r\n+    SQL_FETCH_FIRST = 2\r\n+}\r\n+\r\n+// * Other codes used for FetchOrientation in SQLFetchScroll() *\r\n+enum\r\n+{\r\n+    SQL_FETCH_LAST     = 3,\r\n+    SQL_FETCH_PRIOR    = 4,\r\n+    SQL_FETCH_ABSOLUTE = 5,\r\n+    SQL_FETCH_RELATIVE = 6\r\n+}\r\n+\r\n+// * SQLEndTran() options *\r\n+enum\r\n+{\r\n+    SQL_COMMIT   = 0,\r\n+    SQL_ROLLBACK = 1\r\n+}\r\n+\r\n+// * null handles returned by SQLAllocHandle() *\r\n+enum SQLHANDLE SQL_NULL_HENV  = cast(SQLHANDLE)0;\r\n+enum SQLHANDLE SQL_NULL_HDBC  = cast(SQLHANDLE)0;\r\n+enum SQLHANDLE SQL_NULL_HSTMT = cast(SQLHANDLE)0;\r\n+enum SQLHANDLE SQL_NULL_HDESC = cast(SQLHANDLE)0;\r\n+\r\n+// * null handle used in place of parent handle when allocating HENV *\r\n+enum SQLHANDLE SQL_NULL_HANDLE = cast(SQLHANDLE)0L;\r\n+\r\n+// * Values that may appear in the result set of SQLSpecialColumns() *\r\n+enum\r\n+{\r\n+    SQL_SCOPE_CURROW      = 0,\r\n+    SQL_SCOPE_TRANSACTION = 1,\r\n+    SQL_SCOPE_SESSION     = 2\r\n+}\r\n+\r\n+enum\r\n+{\r\n+    SQL_PC_UNKNOWN    = 0,\r\n+    SQL_PC_NON_PSEUDO = 1,\r\n+    SQL_PC_PSEUDO     = 2\r\n+}\r\n+\r\n+// * Reserved value for the IdentifierType argument of SQLSpecialColumns() *\r\n+enum\r\n+{\r\n+    SQL_ROW_IDENTIFIER = 1\r\n+}\r\n+\r\n+// * Reserved values for UNIQUE argument of SQLStatistics() *\r\n+enum\r\n+{\r\n+    SQL_INDEX_UNIQUE    = 0,\r\n+    SQL_INDEX_ALL       = 1,\r\n+\r\n+    // * Values that may appear in the result set of SQLStatistics() *\r\n+    SQL_INDEX_CLUSTERED = 1,\r\n+    SQL_INDEX_HASHED    = 2,\r\n+    SQL_INDEX_OTHER     = 3\r\n+}\r\n+\r\n+// * SQLGetFunctions() values to identify ODBC APIs *\r\n+enum\r\n+{\r\n+    SQL_API_SQLALLOCCONNECT     =    1,\r\n+    SQL_API_SQLALLOCENV         =    2,\r\n+    SQL_API_SQLALLOCHANDLE      = 1001,\r\n+    SQL_API_SQLALLOCSTMT        =    3,\r\n+    SQL_API_SQLBINDCOL          =    4,\r\n+    SQL_API_SQLBINDPARAM        = 1002,\r\n+    SQL_API_SQLCANCEL           =    5,\r\n+    SQL_API_SQLCLOSECURSOR      = 1003,\r\n+    SQL_API_SQLCOLATTRIBUTE     =    6,\r\n+    SQL_API_SQLCOLUMNS          =   40,\r\n+    SQL_API_SQLCONNECT          =    7,\r\n+    SQL_API_SQLCOPYDESC         = 1004,\r\n+    SQL_API_SQLDATASOURCES      =   57,\r\n+    SQL_API_SQLDESCRIBECOL      =    8,\r\n+    SQL_API_SQLDISCONNECT       =    9,\r\n+    SQL_API_SQLENDTRAN          = 1005,\r\n+    SQL_API_SQLERROR            =   10,\r\n+    SQL_API_SQLEXECDIRECT       =   11,\r\n+    SQL_API_SQLEXECUTE          =   12,\r\n+    SQL_API_SQLFETCH            =   13,\r\n+    SQL_API_SQLFETCHSCROLL      = 1021,\r\n+    SQL_API_SQLFREECONNECT      =   14,\r\n+    SQL_API_SQLFREEENV          =   15,\r\n+    SQL_API_SQLFREEHANDLE       = 1006,\r\n+    SQL_API_SQLFREESTMT         =   16,\r\n+    SQL_API_SQLGETCONNECTATTR   = 1007,\r\n+    SQL_API_SQLGETCONNECTOPTION =   42,\r\n+    SQL_API_SQLGETCURSORNAME    =   17,\r\n+    SQL_API_SQLGETDATA          =   43,\r\n+    SQL_API_SQLGETDESCFIELD     = 1008,\r\n+    SQL_API_SQLGETDESCREC       = 1009,\r\n+    SQL_API_SQLGETDIAGFIELD     = 1010,\r\n+    SQL_API_SQLGETDIAGREC       = 1011,\r\n+    SQL_API_SQLGETENVATTR       = 1012,\r\n+    SQL_API_SQLGETFUNCTIONS     =   44,\r\n+    SQL_API_SQLGETINFO          =   45,\r\n+    SQL_API_SQLGETSTMTATTR      = 1014,\r\n+    SQL_API_SQLGETSTMTOPTION    =   46,\r\n+    SQL_API_SQLGETTYPEINFO      =   47,\r\n+    SQL_API_SQLNUMRESULTCOLS    =   18,\r\n+    SQL_API_SQLPARAMDATA        =   48,\r\n+    SQL_API_SQLPREPARE          =   19,\r\n+    SQL_API_SQLPUTDATA          =   49,\r\n+    SQL_API_SQLROWCOUNT         =   20,\r\n+    SQL_API_SQLSETCONNECTATTR   = 1016,\r\n+    SQL_API_SQLSETCONNECTOPTION =   50,\r\n+    SQL_API_SQLSETCURSORNAME    =   21,\r\n+    SQL_API_SQLSETDESCFIELD     = 1017,\r\n+    SQL_API_SQLSETDESCREC       = 1018,\r\n+    SQL_API_SQLSETENVATTR       = 1019,\r\n+    SQL_API_SQLSETPARAM         =   22,\r\n+    SQL_API_SQLSETSTMTATTR      = 1020,\r\n+    SQL_API_SQLSETSTMTOPTION    =   51,\r\n+    SQL_API_SQLSPECIALCOLUMNS   =   52,\r\n+    SQL_API_SQLSTATISTICS       =   53,\r\n+    SQL_API_SQLTABLES           =   54,\r\n+    SQL_API_SQLTRANSACT         =   23\r\n+}\r\n+\r\n+// * Information requested by SQLGetInfo() *\r\n+enum\r\n+{\r\n+    SQL_MAX_DRIVER_CONNECTIONS        = 0,\r\n+    SQL_MAXIMUM_DRIVER_CONNECTIONS    = SQL_MAX_DRIVER_CONNECTIONS,\r\n+    SQL_MAX_CONCURRENT_ACTIVITIES     = 1,\r\n+    SQL_MAXIMUM_CONCURRENT_ACTIVITIES = SQL_MAX_CONCURRENT_ACTIVITIES,\r\n+    SQL_DATA_SOURCE_NAME              = 2,\r\n+    SQL_FETCH_DIRECTION               = 8,\r\n+    SQL_SERVER_NAME                   = 13,\r\n+    SQL_SEARCH_PATTERN_ESCAPE         = 14,\r\n+    SQL_DBMS_NAME                     = 17,\r\n+    SQL_DBMS_VER                      = 18,\r\n+    SQL_ACCESSIBLE_TABLES             = 19,\r\n+    SQL_ACCESSIBLE_PROCEDURES         = 20,\r\n+    SQL_CURSOR_COMMIT_BEHAVIOR        = 23,\r\n+    SQL_DATA_SOURCE_READ_ONLY         = 25,\r\n+    SQL_DEFAULT_TXN_ISOLATION         = 26,\r\n+    SQL_IDENTIFIER_CASE               = 28,\r\n+    SQL_IDENTIFIER_QUOTE_CHAR         = 29,\r\n+    SQL_MAX_COLUMN_NAME_LEN           = 30,\r\n+    SQL_MAXIMUM_COLUMN_NAME_LENGTH    = SQL_MAX_COLUMN_NAME_LEN,\r\n+    SQL_MAX_CURSOR_NAME_LEN           = 31,\r\n+    SQL_MAXIMUM_CURSOR_NAME_LENGTH    = SQL_MAX_CURSOR_NAME_LEN,\r\n+    SQL_MAX_SCHEMA_NAME_LEN           = 32,\r\n+    SQL_MAXIMUM_SCHEMA_NAME_LENGTH    = SQL_MAX_SCHEMA_NAME_LEN,\r\n+    SQL_MAX_CATALOG_NAME_LEN          = 34,\r\n+    SQL_MAXIMUM_CATALOG_NAME_LENGTH   = SQL_MAX_CATALOG_NAME_LEN,\r\n+    SQL_MAX_TABLE_NAME_LEN            = 35,\r\n+    SQL_SCROLL_CONCURRENCY            = 43,\r\n+    SQL_TXN_CAPABLE                   = 46,\r\n+    SQL_TRANSACTION_CAPABLE           = SQL_TXN_CAPABLE,\r\n+    SQL_USER_NAME                     = 47,\r\n+    SQL_TXN_ISOLATION_OPTION          = 72,\r\n+    SQL_TRANSACTION_ISOLATION_OPTION  = SQL_TXN_ISOLATION_OPTION,\r\n+    SQL_INTEGRITY                     = 73,\r\n+    SQL_GETDATA_EXTENSIONS            = 81,\r\n+    SQL_NULL_COLLATION                = 85,\r\n+    SQL_ALTER_TABLE                   = 86,\r\n+    SQL_ORDER_BY_COLUMNS_IN_SELECT    = 90,\r\n+    SQL_SPECIAL_CHARACTERS            = 94,\r\n+    SQL_MAX_COLUMNS_IN_GROUP_BY       = 97,\r\n+    SQL_MAXIMUM_COLUMNS_IN_GROUP_BY   = SQL_MAX_COLUMNS_IN_GROUP_BY,\r\n+    SQL_MAX_COLUMNS_IN_INDEX          = 98,\r\n+    SQL_MAXIMUM_COLUMNS_IN_INDEX      = SQL_MAX_COLUMNS_IN_INDEX,\r\n+    SQL_MAX_COLUMNS_IN_ORDER_BY       = 99,\r\n+    SQL_MAXIMUM_COLUMNS_IN_ORDER_BY   = SQL_MAX_COLUMNS_IN_ORDER_BY,\r\n+    SQL_MAX_COLUMNS_IN_SELECT         = 100,\r\n+    SQL_MAXIMUM_COLUMNS_IN_SELECT     = SQL_MAX_COLUMNS_IN_SELECT,\r\n+    SQL_MAX_COLUMNS_IN_TABLE          = 101,\r\n+    SQL_MAX_INDEX_SIZE                = 102,\r\n+    SQL_MAXIMUM_INDEX_SIZE            = SQL_MAX_INDEX_SIZE,\r\n+    SQL_MAX_ROW_SIZE                  = 104,\r\n+    SQL_MAXIMUM_ROW_SIZE              = SQL_MAX_ROW_SIZE,\r\n+    SQL_MAX_STATEMENT_LEN             = 105,\r\n+    SQL_MAXIMUM_STATEMENT_LENGTH      = SQL_MAX_STATEMENT_LEN,\r\n+    SQL_MAX_TABLES_IN_SELECT          = 106,\r\n+    SQL_MAXIMUM_TABLES_IN_SELECT      = SQL_MAX_TABLES_IN_SELECT,\r\n+    SQL_MAX_USER_NAME_LEN             = 107,\r\n+    SQL_MAXIMUM_USER_NAME_LENGTH      = SQL_MAX_USER_NAME_LEN,\r\n+    SQL_OJ_CAPABILITIES               = 115,\r\n+    SQL_OUTER_JOIN_CAPABILITIES       = SQL_OJ_CAPABILITIES\r\n+}\r\n+\r\n+enum\r\n+{\r\n+    SQL_XOPEN_CLI_YEAR            = 10000,\r\n+    SQL_CURSOR_SENSITIVITY        = 10001,\r\n+    SQL_DESCRIBE_PARAMETER        = 10002,\r\n+    SQL_CATALOG_NAME              = 10003,\r\n+    SQL_COLLATION_SEQ             = 10004,\r\n+    SQL_MAX_IDENTIFIER_LEN        = 10005,\r\n+    SQL_MAXIMUM_IDENTIFIER_LENGTH = SQL_MAX_IDENTIFIER_LEN\r\n+}\r\n+\r\n+// * SQL_ALTER_TABLE bitmasks *\r\n+enum\r\n+{\r\n+    SQL_AT_ADD_COLUMN     = 0x00000001L,\r\n+    SQL_AT_DROP_COLUMN    = 0x00000002L,\r\n+    SQL_AT_ADD_CONSTRAINT = 0x00000008L\r\n+}\r\n+\r\n+/+ The following bitmasks are ODBC extensions and defined in sqlext.d\r\n+enum : ulong\r\n+{\r\n+    SQL_AT_COLUMN_SINGLE                  = 0x00000020L,\r\n+    SQL_AT_ADD_COLUMN_DEFAULT             = 0x00000040L,\r\n+    SQL_AT_ADD_COLUMN_COLLATION           = 0x00000080L,\r\n+    SQL_AT_SET_COLUMN_DEFAULT             = 0x00000100L,\r\n+    SQL_AT_DROP_COLUMN_DEFAULT            = 0x00000200L,\r\n+    SQL_AT_DROP_COLUMN_CASCADE            = 0x00000400L,\r\n+    SQL_AT_DROP_COLUMN_RESTRICT           = 0x00000800L,\r\n+    SQL_AT_ADD_TABLE_CONSTRAINT           = 0x00001000L,\r\n+    SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE  = 0x00002000L,\r\n+    SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT = 0x00004000L,\r\n+    SQL_AT_CONSTRAINT_NAME_DEFINITION     = 0x00008000L,\r\n+    SQL_AT_CONSTRAINT_INITIALLY_DEFERRED  = 0x00010000L,\r\n+    SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00020000L,\r\n+    SQL_AT_CONSTRAINT_DEFERRABLE          = 0x00040000L,\r\n+    SQL_AT_CONSTRAINT_NON_DEFERRABLE      = 0x00080000L\r\n+}\r\n++/\r\n+\r\n+// * SQL_ASYNC_MODE values *\r\n+enum\r\n+{\r\n+    SQL_AM_NONE       = 0,\r\n+    SQL_AM_CONNECTION = 1,\r\n+    SQL_AM_STATEMENT  = 2\r\n+}\r\n+\r\n+// * SQL_CURSOR_COMMIT_BEHAVIOR values *\r\n+enum\r\n+{\r\n+    SQL_CB_DELETE   = 0,\r\n+    SQL_CB_CLOSE    = 1,\r\n+    SQL_CB_PRESERVE = 2\r\n+}\r\n+\r\n+// * SQL_FETCH_DIRECTION bitmasks *\r\n+enum\r\n+{\r\n+    SQL_FD_FETCH_NEXT     = 0x00000001L,\r\n+    SQL_FD_FETCH_FIRST    = 0x00000002L,\r\n+    SQL_FD_FETCH_LAST     = 0x00000004L,\r\n+    SQL_FD_FETCH_PRIOR    = 0x00000008L,\r\n+    SQL_FD_FETCH_ABSOLUTE = 0x00000010L,\r\n+    SQL_FD_FETCH_RELATIVE = 0x00000020L\r\n+}\r\n+\r\n+// * SQL_GETDATA_EXTENSIONS bitmasks *\r\n+enum\r\n+{\r\n+    SQL_GD_ANY_COLUMN = 0x00000001L,\r\n+    SQL_GD_ANY_ORDER  = 0x00000002L\r\n+}\r\n+\r\n+// * SQL_IDENTIFIER_CASE values *\r\n+enum\r\n+{\r\n+    SQL_IC_UPPER     = 1,\r\n+    SQL_IC_LOWER     = 2,\r\n+    SQL_IC_SENSITIVE = 3,\r\n+    SQL_IC_MIXED     = 4\r\n+}\r\n+\r\n+// * SQL_OJ_CAPABILITIES bitmasks *\r\n+// * OJ means 'outer join' *\r\n+enum\r\n+{\r\n+    SQL_OJ_LEFT               = 0x00000001L,\r\n+    SQL_OJ_RIGHT              = 0x00000002L,\r\n+    SQL_OJ_FULL               = 0x00000004L,\r\n+    SQL_OJ_NESTED             = 0x00000008L,\r\n+    SQL_OJ_NOT_ORDERED        = 0x00000010L,\r\n+    SQL_OJ_INNER              = 0x00000020L,\r\n+    SQL_OJ_ALL_COMPARISON_OPS = 0x00000040L\r\n+}\r\n+\r\n+// * SQL_SCROLL_CONCURRENCY bitmasks *\r\n+enum\r\n+{\r\n+    SQL_SCCO_READ_ONLY  = 0x00000001L,\r\n+    SQL_SCCO_LOCK       = 0x00000002L,\r\n+    SQL_SCCO_OPT_ROWVER = 0x00000004L,\r\n+    SQL_SCCO_OPT_VALUES = 0x00000008L\r\n+}\r\n+\r\n+// * SQL_TXN_CAPABLE values *\r\n+enum\r\n+{\r\n+    SQL_TC_NONE       = 0,\r\n+    SQL_TC_DML        = 1,\r\n+    SQL_TC_ALL        = 2,\r\n+    SQL_TC_DDL_COMMIT = 3,\r\n+    SQL_TC_DDL_IGNORE = 4\r\n+}\r\n+\r\n+// * SQL_TXN_ISOLATION_OPTION bitmasks *\r\n+enum\r\n+{\r\n+    SQL_TXN_READ_UNCOMMITTED         = 0x00000001L,\r\n+    SQL_TRANSACTION_READ_UNCOMMITTED = SQL_TXN_READ_UNCOMMITTED,\r\n+    SQL_TXN_READ_COMMITTED           = 0x00000002L,\r\n+    SQL_TRANSACTION_READ_COMMITTED   = SQL_TXN_READ_COMMITTED,\r\n+    SQL_TXN_REPEATABLE_READ          = 0x00000004L,\r\n+    SQL_TRANSACTION_REPEATABLE_READ  = SQL_TXN_REPEATABLE_READ,\r\n+    SQL_TXN_SERIALIZABLE             = 0x00000008L,\r\n+    SQL_TRANSACTION_SERIALIZABLE     = SQL_TXN_SERIALIZABLE\r\n+}\r\n+\r\n+// * SQL_NULL_COLLATION values *\r\n+enum\r\n+{\r\n+    SQL_NC_HIGH = 0,\r\n+    SQL_NC_LOW  = 1\r\n+}\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Allocates an environment, connection, statement, or descriptor handle.\r\n+ '\r\n+ ' -- HandleTypes --\r\n+ ' SQL_HANDLE_ENV\r\n+ ' SQL_HANDLE_DBC\r\n+ ' SQL_HANDLE_DESC\r\n+ ' SQL_HANDLE_STMT\r\n+ '\r\n+ ' -- InputHandle --\r\n+ ' The input handle in whose context the new handle is to be allocated.\r\n+ ' If HandleType is SQL_HANDLE_ENV, this is SQL_NULL_HANDLE. If HandleType\r\n+ ' is SQL_HANDLE_DBC, this must be an environment handle, and if it is\r\n+ ' SQL_HANDLE_STMT or SQL_HANDLE_DESC, it must be a connection handle.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLAllocHandle\r\n+(\r\n+    /+ IN  +/ SQLSMALLINT HandleType,\r\n+    /+ IN  +/ SQLHANDLE   InputHandle,\r\n+    /+ OUT +/ SQLHANDLE   *OutputHandle\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Binds application data buffers to columns in the result set.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLBindCol\r\n+(\r\n+    /+ IN     +/ SQLHSTMT     StatementHandle,\r\n+    /+ IN     +/ SQLUSMALLINT ColumnNumber,\r\n+    /+ IN     +/ SQLSMALLINT  TargetType,\r\n+    /+ INOUT  +/ SQLPOINTER   TargetValue,\r\n+    /+ IN     +/ SQLINTEGER   BufferLength,\r\n+    /+ INOUT  +/ SQLINTEGER   *StrLen_or_Ind\r\n+);\r\n+\r\n+SQLRETURN SQLBindParam\r\n+(\r\n+    SQLHSTMT     StatementHandle,\r\n+    SQLUSMALLINT ParameterNumber,\r\n+    SQLSMALLINT  ValueType,\r\n+    SQLSMALLINT  ParameterType,\r\n+    SQLUINTEGER  LengthPrecision,\r\n+    SQLSMALLINT  ParameterScale,\r\n+    SQLPOINTER   ParameterValue,\r\n+    SQLINTEGER   *StrLen_or_Ind\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Cancels the processing on a statement.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLCancel\r\n+(\r\n+    /+ IN  +/ SQLHSTMT StatementHandle\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Closes a cursor that has been opened on a statement and discards pending results.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLCloseCursor\r\n+(\r\n+    SQLHSTMT StatementHandle\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Returns descriptor information for a column in a result set.\r\n+ ' Descriptor information is returned as a character string, a 32-bit\r\n+ ' descriptor-dependent value, or an integer value.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLColAttribute\r\n+(\r\n+    /+ IN  +/ SQLHSTMT     StatementHandle,\r\n+    /+ IN  +/ SQLUSMALLINT ColumnNumber,\r\n+    /+ IN  +/ SQLUSMALLINT FieldIdentifier,\r\n+    /+ OUT +/ SQLPOINTER   CharacterAttribute,\r\n+    /+ IN  +/ SQLSMALLINT  BufferLength,\r\n+    /+ OUT +/ SQLSMALLINT  *StringLength,\r\n+    /+ OUT +/ SQLPOINTER   NumericAttribute\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ X/Open\r\n+ ' Returns the list of column names in specified tables. The driver\r\n+ ' returns this information as a result set on the specified StatementHandle.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLColumns\r\n+(\r\n+    /+ IN  +/ SQLHSTMT    StatementHandle,\r\n+    /+ IN  +/ SQLCHAR     *CatalogName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength1,\r\n+    /+ IN  +/ SQLCHAR     *SchemaName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength2,\r\n+    /+ IN  +/ SQLCHAR     *TableName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength3,\r\n+    /+ IN  +/ SQLCHAR     *ColumnName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength4\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Establishes connections to a driver and a data source. The connection\r\n+ ' handle references storage of all information about the connection to\r\n+ ' the data source, including status, transaction state, and error information.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLConnect\r\n+(\r\n+    /+ IN  +/ SQLHDBC     ConnectionHandle,\r\n+    /+ IN  +/ SQLCHAR     *ServerName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength1,\r\n+    /+ IN  +/ SQLCHAR     *UserName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength2,\r\n+    /+ IN  +/ SQLCHAR     *Authentication,\r\n+    /+ IN  +/ SQLSMALLINT NameLength3\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Copies descriptor information from one descriptor handle to another.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLCopyDesc\r\n+(\r\n+    /+ IN  +/ SQLHDESC SourceDescHandle,\r\n+    /+ IN  +/ SQLHDESC TargetDescHandle\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Returns information about a data source. This function is implemented\r\n+ ' solely by the Driver Manager.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLDataSources\r\n+(\r\n+    /+ IN  +/ SQLHENV      EnvironmentHandle,\r\n+    /+ IN  +/ SQLUSMALLINT Direction,\r\n+    /+ OUT +/ SQLCHAR      *ServerName,\r\n+    /+ IN  +/ SQLSMALLINT  BufferLength1,\r\n+    /+ OUT +/ SQLSMALLINT  *NameLength1,\r\n+    /+ OUT +/ SQLCHAR      *Description,\r\n+    /+ IN  +/ SQLSMALLINT  BufferLength2,\r\n+    /+ OUT +/ SQLSMALLINT  *NameLength2\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Returns the result descriptor column name, type, column size,\r\n+ ' decimal digits, and nullability for one column in the result set.\r\n+ ' This information also is available in the fields of the IRD.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLDescribeCol\r\n+(\r\n+    /+ IN  +/ SQLHSTMT     StatementHandle,\r\n+    /+ IN  +/ SQLUSMALLINT ColumnNumber,\r\n+    /+ OUT +/ SQLCHAR      *ColumnName,\r\n+    /+ IN  +/ SQLSMALLINT  BufferLength,\r\n+    /+ OUT +/ SQLSMALLINT  *NameLength,\r\n+    /+ OUT +/ SQLSMALLINT  *DataType,\r\n+    /+ OUT +/ SQLUINTEGER  *ColumnSize,\r\n+    /+ OUT +/ SQLSMALLINT  *DecimalDigits,\r\n+    /+ OUT +/ SQLSMALLINT  *Nullable\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Closes the connection associated with a specific connection handle.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLDisconnect\r\n+(\r\n+    /+ IN  +/ SQLHDBC ConnectionHandle\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Requests a commit or rollback operation for all active operations on all\r\n+ ' statements associated with a connection. SQLEndTran can also request that\r\n+ ' a commit or rollback operation be performed for all connections associated\r\n+ ' with an environment.\r\n+ '\r\n+ ' -- HandleType --\r\n+ ' Contains either SQL_HANDLE_ENV (if Handle is an environment handle)\r\n+ ' or SQL_HANDLE_DBC (if Handle is a connection handle).\r\n+ '\r\n+ ' -- Handle --\r\n+ ' The handle, of the type indicated by HandleType, indicating the scope of the transaction.\r\n+ '\r\n+ ' -- CompletionType --\r\n+ ' One of the following two values:\r\n+ ' SQL_COMMIT\r\n+ ' SQL_ROLLBACK\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLEndTran\r\n+(\r\n+    /+ IN  +/ SQLSMALLINT HandleType,\r\n+    /+ IN  +/ SQLHANDLE   Handle,\r\n+    /+ IN  +/ SQLSMALLINT CompletionType\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Executes a preparable statement, using the current values of the\r\n+ ' parameter marker variables if any parameters exist in the statement.\r\n+ ' SQLExecDirect is the fastest way to submit an SQL statement for\r\n+ ' one-time execution.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLExecDirect\r\n+(\r\n+    /+ IN  +/ SQLHSTMT   StatementHandle,\r\n+    /+ IN  +/ SQLCHAR    *StatementText,\r\n+    /+ IN  +/ SQLINTEGER TextLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Executes a prepared statement, using the current values of the parameter\r\n+ ' marker variables if any parameter markers exist in the statement.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLExecute\r\n+(\r\n+    /+ IN  +/ SQLHSTMT StatementHandle\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Fetches the next rowset of data from the result set and returns\r\n+ ' data for all bound columns.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLFetch\r\n+(\r\n+    /+ IN  +/ SQLHSTMT StatementHandle\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Fetches the specified rowset of data from the result set and\r\n+ ' returns data for all bound columns. Rowsets can be specified\r\n+ ' at an absolute or relative position or by bookmark.\r\n+ '\r\n+ ' -- FetchOrientation --\r\n+ ' Type of fetch:\r\n+ ' SQL_FETCH_NEXT\r\n+ ' SQL_FETCH_PRIOR\r\n+ ' SQL_FETCH_FIRST\r\n+ ' SQL_FETCH_LAST\r\n+ ' SQL_FETCH_ABSOLUTE\r\n+ ' SQL_FETCH_RELATIVE\r\n+ ' SQL_FETCH_BOOKMARK\r\n+ '\r\n+ ' -- FetchOffset --\r\n+ ' Number of the row to fetch based on the type above.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLFetchScroll\r\n+(\r\n+    /+ IN  +/ SQLHSTMT    StatementHandle,\r\n+    /+ IN  +/ SQLSMALLINT FetchOrientation,\r\n+    /+ IN  +/ SQLINTEGER  FetchOffset\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Frees resources associated with a specific environment, connection,\r\n+ ' statement, or descriptor handle.\r\n+ '\r\n+ ' -- HandleType --\r\n+ ' Must be one of the following values:\r\n+ ' SQL_HANDLE_ENV\r\n+ ' SQL_HANDLE_DBC\r\n+ ' SQL_HANDLE_STMT\r\n+ ' SQL_HANDLE_DESC\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLFreeHandle\r\n+(\r\n+    /+ IN  +/ SQLSMALLINT HandleType,\r\n+    /+ IN  +/ SQLHANDLE   Handle\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Stops processing associated with a specific statement,\r\n+ ' closes any open cursors associated with the statement,\r\n+ ' discards pending results, or, optionally, frees all\r\n+ ' resources associated with the statement handle.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLFreeStmt\r\n+(\r\n+    /+ IN  +/ SQLHSTMT     StatementHandle,\r\n+    /+ IN  +/ SQLUSMALLINT Option\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+  ISO 92\r\n+ ' Returns the current setting of a connection attribute.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetConnectAttr\r\n+(\r\n+    /+ IN  +/ SQLHDBC    ConnectionHandle,\r\n+    /+ IN  +/ SQLINTEGER Attribute,\r\n+    /+ OUT +/ SQLPOINTER Value,\r\n+    /+ IN  +/ SQLINTEGER BufferLength,\r\n+    /+ OUT +/ SQLINTEGER *StringLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.+ ISO 92\r\n+ ' Returns the cursor name associated with a specified statement.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetCursorName\r\n+(\r\n+    /+ IN  +/ SQLHSTMT    StatementHandle,\r\n+    /+ OUT +/ SQLCHAR     *CursorName,\r\n+    /+ IN  +/ SQLSMALLINT BufferLength,\r\n+    /+ OUT +/ SQLSMALLINT *NameLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Retrieves data for a single column in the result set. It can be called\r\n+ ' multiple times to retrieve variable-length data in parts.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetData\r\n+(\r\n+    /+ IN  +/ SQLHSTMT     StatementHandle,\r\n+    /+ IN  +/ SQLUSMALLINT ColumnNumber,\r\n+    /+ IN  +/ SQLSMALLINT  TargetType,\r\n+    /+ OUT +/ SQLPOINTER   TargetValue,\r\n+    /+ IN  +/ SQLINTEGER   BufferLength,\r\n+    /+ OUT +/ SQLINTEGER   *StrLen_or_Ind\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Returns the current setting or value of a single field of a descriptor record.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetDescField\r\n+(\r\n+    /+ IN  +/ SQLHDESC    DescriptorHandle,\r\n+    /+ IN  +/ SQLSMALLINT RecNumber,\r\n+    /+ IN  +/ SQLSMALLINT FieldIdentifier,\r\n+    /+ OUT +/ SQLPOINTER  Value,\r\n+    /+ IN  +/ SQLINTEGER  BufferLength,\r\n+    /+ OUT +/ SQLINTEGER  *StringLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Returns the current settings or values of multiple fields of a descriptor\r\n+ ' record. The fields returned describe the name, data type, and storage of\r\n+ ' column or parameter data.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetDescRec\r\n+(\r\n+    /+ IN  +/ SQLHDESC    DescriptorHandle,\r\n+    /+ IN  +/ SQLSMALLINT RecNumber,\r\n+    /+ OUT +/ SQLCHAR     *Name,         // SQLGetDescField( DescriptorHandle = SQL_DESC_NAME )\r\n+    /+ IN  +/ SQLSMALLINT BufferLength,\r\n+    /+ OUT +/ SQLSMALLINT *StringLength,\r\n+    /+ OUT +/ SQLSMALLINT *Type,         // SQLGetDescField( DescriptorHandle = SQL_DESC_TYPE )\r\n+    /+ OUT +/ SQLSMALLINT *SubType,      // SQLGetDescField( DescriptorHandle = SQL_DESC_DATETIME_INTERVAL_CODE  )\r\n+    /+ OUT +/ SQLINTEGER  *Length,       // SQLGetDescField( DescriptorHandle = SQL_DESC_OCTET_LENGTH )\r\n+    /+ OUT +/ SQLSMALLINT *Precision,    // SQLGetDescField( DescriptorHandle = SQL_DESC_PRECISION )\r\n+    /+ OUT +/ SQLSMALLINT *Scale,        // SQLGetDescField( DescriptorHandle = SQL_DESC_SCALE )\r\n+    /+ OUT +/ SQLSMALLINT *Nullable      // SQLGetDescField( DescriptorHandle = SQL_DESC_NULLABLE )\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Returns the current value of a field of a record of the diagnostic\r\n+ ' data structure (associated with a specified handle) that contains\r\n+ ' error, warning, and status information.\r\n+ '\r\n+ ' -- HandleType --\r\n+ ' Must be one of the following:\r\n+ ' SQL_HANDLE_ENV\r\n+ ' SQL_HANDLE_DBC\r\n+ ' SQL_HANDLE_STMT\r\n+ ' SQL_HANDLE_DESC\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetDiagField\r\n+(\r\n+    /+ IN  +/ SQLSMALLINT HandleType,\r\n+    /+ IN  +/ SQLHANDLE   Handle,\r\n+    /+ IN  +/ SQLSMALLINT RecNumber,\r\n+    /+ IN  +/ SQLSMALLINT DiagIdentifier,\r\n+    /+ OUT +/ SQLPOINTER  DiagInfo,\r\n+    /+ IN  +/ SQLSMALLINT BufferLength,\r\n+    /+ OUT +/ SQLSMALLINT *StringLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Returns the current values of multiple fields of a diagnostic record that\r\n+ ' contains error, warning, and status information. Unlike SQLGetDiagField,\r\n+ ' which returns one diagnostic field per call, SQLGetDiagRec returns several\r\n+ ' commonly used fields of a diagnostic record, including the SQLSTATE, the\r\n+ ' native error code, and the diagnostic message text.\r\n+ '\r\n+ ' -- HandleType --\r\n+ ' Must be one of the following:\r\n+ ' SQL_HANDLE_ENV\r\n+ ' SQL_HANDLE_DBC\r\n+ ' SQL_HANDLE_STMT\r\n+ ' SQL_HANDLE_DESC\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetDiagRec\r\n+(\r\n+    /+ IN  +/ SQLSMALLINT HandleType,\r\n+    /+ IN  +/ SQLHANDLE   Handle,\r\n+    /+ IN  +/ SQLSMALLINT RecNumber,\r\n+    /+ OUT +/ SQLCHAR     *Sqlstate,\r\n+    /+ OUT +/ SQLINTEGER  *NativeError,\r\n+    /+ OUT +/ SQLCHAR     *MessageText,\r\n+    /+ IN  +/ SQLSMALLINT BufferLength,\r\n+    /+ OUT +/ SQLSMALLINT *TextLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Returns the current setting of an environment attribute.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetEnvAttr\r\n+(\r\n+    /+ IN  +/ SQLHENV EnvironmentHandle,\r\n+    /+ IN  +/ SQLINTEGER Attribute,\r\n+    /+ OUT +/ SQLPOINTER Value,\r\n+    /+ IN  +/ SQLINTEGER BufferLength,\r\n+    /+ OUT +/ SQLINTEGER *StringLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' returns information about whether a driver supports a specific ODBC\r\n+ ' function. This function is implemented in the Driver Manager; it can\r\n+ ' also be implemented in drivers. If a driver implements SQLGetFunctions,\r\n+ ' the Driver Manager calls the function in the driver. Otherwise,\r\n+ ' it executes the function itself.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetFunctions\r\n+(\r\n+    /+ IN  +/ SQLHDBC      ConnectionHandle,\r\n+    /+ IN  +/ SQLUSMALLINT FunctionId,\r\n+    /+ OUT +/ SQLUSMALLINT *Supported\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Returns general information about the driver and data\r\n+ ' source associated with a connection.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetInfo\r\n+(\r\n+    /+ IN  +/ SQLHDBC      ConnectionHandle,\r\n+    /+ IN  +/ SQLUSMALLINT InfoType,\r\n+    /+ OUT +/ SQLPOINTER   InfoValue,\r\n+    /+ IN  +/ SQLSMALLINT  BufferLength,\r\n+    /+ OUT +/ SQLSMALLINT  *StringLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Returns the current setting of a statement attribute.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetStmtAttr\r\n+(\r\n+    /+ IN  +/ SQLHSTMT   StatementHandle,\r\n+    /+ IN  +/ SQLINTEGER Attribute,\r\n+    /+ OUT +/ SQLPOINTER Value,\r\n+    /+ IN  +/ SQLINTEGER BufferLength,\r\n+    /+ OUT +/ SQLINTEGER *StringLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Returns information about data types supported by the data source.\r\n+ ' The driver returns the information in the form of an SQL result set.\r\n+ ' The data types are intended for use in Data Definition Language (DDL) statements.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLGetTypeInfo\r\n+(\r\n+    /+ IN  +/ SQLHSTMT    StatementHandle,\r\n+    /+ IN  +/ SQLSMALLINT DataType\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Returns the number of columns in a result set.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLNumResultCols\r\n+(\r\n+    /+ IN  +/ SQLHSTMT    StatementHandle,\r\n+    /+ OUT +/ SQLSMALLINT *ColumnCount\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Is used in conjunction with SQLPutData to supply parameter data at statement execution time.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLParamData\r\n+(\r\n+    /+ IN  +/ SQLHSTMT   StatementHandle,\r\n+    /+ OUT +/ SQLPOINTER *Value\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Prepares an SQL string for execution.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLPrepare\r\n+(\r\n+    /+ IN  +/ SQLHSTMT   StatementHandle,\r\n+    /+ IN  +/ SQLCHAR   *StatementText,\r\n+    /+ IN  +/ SQLINTEGER TextLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Allows an application to send data for a parameter or column to the driver\r\n+ ' at statement execution time. This function can be used to send character or\r\n+ ' binary data values in parts to a column with a character, binary, or data\r\n+ ' source specific data type (for example, parameters of the SQL_LONGVARBINARY\r\n+ ' or SQL_LONGVARCHAR types). SQLPutData supports binding to a Unicode C data\r\n+ ' type, even if the underlying driver does not support Unicode data.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLPutData\r\n+(\r\n+    /+ IN  +/ SQLHSTMT   StatementHandle,\r\n+    /+ IN  +/ SQLPOINTER Data,\r\n+    /+ IN  +/ SQLINTEGER StrLen_or_Ind\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.+ ISO 92\r\n+ ' Returns the number of rows affected by an UPDATE, INSERT, or DELETE statement;\r\n+ ' an SQL_ADD, SQL_UPDATE_BY_BOOKMARK, or SQL_DELETE_BY_BOOKMARK operation in\r\n+ ' SQLBulkOperations; or an SQL_UPDATE or SQL_DELETE operation in SQLSetPos.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLRowCount\r\n+(\r\n+    /+ IN  +/ SQLHSTMT   StatementHandle,\r\n+    /+ OUT +/ SQLINTEGER *RowCount\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Sets attributes that govern aspects of connections.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLSetConnectAttr\r\n+(\r\n+    /+ IN  +/ SQLHDBC    ConnectionHandle,\r\n+    /+ IN  +/ SQLINTEGER Attribute,\r\n+    /+ IN  +/ SQLPOINTER Value,\r\n+    /+ IN  +/ SQLINTEGER StringLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Associates a cursor name with an active statement. If an application\r\n+ ' does not call SQLSetCursorName, the driver generates cursor names as\r\n+ ' needed for SQL statement processing.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLSetCursorName\r\n+(\r\n+    /+ IN  +/ SQLHSTMT    StatementHandle,\r\n+    /+ IN  +/ SQLCHAR     *CursorName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Sets the value of a single field of a descriptor record.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLSetDescField\r\n+(\r\n+    /+ IN  +/ SQLHDESC    DescriptorHandle,\r\n+    /+ IN  +/ SQLSMALLINT RecNumber,\r\n+    /+ IN  +/ SQLSMALLINT FieldIdentifier,\r\n+    /+ IN  +/ SQLPOINTER  Value,\r\n+    /+ IN  +/ SQLINTEGER  BufferLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Function sets multiple descriptor fields that affect the data\r\n+ ' type and buffer bound to a column or parameter data.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLSetDescRec\r\n+(\r\n+    /+ IN    +/ SQLHDESC    DescriptorHandle,\r\n+    /+ IN    +/ SQLSMALLINT RecNumber,\r\n+    /+ IN    +/ SQLSMALLINT Type,\r\n+    /+ IN    +/ SQLSMALLINT SubType,\r\n+    /+ IN    +/ SQLINTEGER  Length,\r\n+    /+ IN    +/ SQLSMALLINT Precision,\r\n+    /+ IN    +/ SQLSMALLINT Scale,\r\n+    /+ INOUT +/ SQLPOINTER  Data,\r\n+    /+ INOUT +/ SQLINTEGER  *StringLength,\r\n+    /+ INOUT +/ SQLINTEGER  *Indicator\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Sets attributes that govern aspects of environments.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLSetEnvAttr\r\n+(\r\n+    /+ IN  +/ SQLHENV    EnvironmentHandle,\r\n+    /+ IN  +/ SQLINTEGER Attribute,\r\n+    /+ IN  +/ SQLPOINTER Value,\r\n+    /+ IN  +/ SQLINTEGER StringLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v3.0+ ISO 92\r\n+ ' Sets attributes related to a statement.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLSetStmtAttr\r\n+(\r\n+    /+ IN  +/ SQLHSTMT   StatementHandle,\r\n+    /+ IN  +/ SQLINTEGER Attribute,\r\n+    /+ IN  +/ SQLPOINTER Value,\r\n+    /+ IN  +/ SQLINTEGER StringLength\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ X/Open\r\n+ ' Retrieves the following information about columns within a specified table:\r\n+ '\r\n+ ' 1) The optimal set of columns that uniquely identifies a row in the table.\r\n+ ' 2) Columns that are automatically updated when any value in the row is updated by a transaction.\r\n+ '\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLSpecialColumns\r\n+(\r\n+    /+ IN  +/ SQLHSTMT     StatementHandle,\r\n+    /+ IN  +/ SQLUSMALLINT IdentifierType,\r\n+    /+ IN  +/ SQLCHAR      *CatalogName,\r\n+    /+ IN  +/ SQLSMALLINT  NameLength1,\r\n+    /+ IN  +/ SQLCHAR      *SchemaName,\r\n+    /+ IN  +/ SQLSMALLINT  NameLength2,\r\n+    /+ IN  +/ SQLCHAR      *TableName,\r\n+    /+ IN  +/ SQLSMALLINT  NameLength3,\r\n+    /+ IN  +/ SQLUSMALLINT Scope,\r\n+    /+ IN  +/ SQLUSMALLINT Nullable\r\n+);\r\n+\r\n+/+\r\n+ ' ODBC v1.0+ ISO 92\r\n+ ' Retrieves a list of statistics about a single table and the\r\n+ ' indexes associated with the table. The driver returns the\r\n+ ' information as a result set.\r\n+ '\r\n+ ' -- Unique --\r\n+ ' Type of index: SQL_INDEX_UNIQUE or SQL_INDEX_ALL.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLStatistics\r\n+(\r\n+    /+ IN  +/ SQLHSTMT     StatementHandle,\r\n+    /+ IN  +/ SQLCHAR      *CatalogName,\r\n+    /+ IN  +/ SQLSMALLINT  NameLength1,\r\n+    /+ IN  +/ SQLCHAR      *SchemaName,\r\n+    /+ IN  +/ SQLSMALLINT  NameLength2,\r\n+    /+ IN  +/ SQLCHAR      *TableName,\r\n+    /+ IN  +/ SQLSMALLINT  NameLength3,\r\n+    /+ IN  +/ SQLUSMALLINT Unique,\r\n+    /+ IN  +/ SQLUSMALLINT Reserved\r\n+);\r\n+\r\n+/+\r\n+ ' OBDC v1.0+ X/Open\r\n+ ' Returns the list of table, catalog, or schema names, and table\r\n+ ' types, stored in a specific data source. The driver returns the\r\n+ ' information as a result set.\r\n+ '\r\n+ +/\r\n+SQLRETURN SQLTables\r\n+(\r\n+    /+ IN  +/ SQLHSTMT    StatementHandle,\r\n+    /+ IN  +/ SQLCHAR     *CatalogName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength1,\r\n+    /+ IN  +/ SQLCHAR     *SchemaName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength2,\r\n+    /+ IN  +/ SQLCHAR     *TableName,\r\n+    /+ IN  +/ SQLSMALLINT NameLength3,\r\n+    /+ IN  +/ SQLCHAR     *TableType,\r\n+    /+ IN  +/ SQLSMALLINT NameLength4\r\n+);\r\n+\r\n+/+---------------------------+\r\n+ | * Deprecated Functions *  |\r\n+ +---------------------------+/\r","path":"etc/c/odbc/sql.d","position":1314,"original_position":1314,"commit_id":"6b5270277cc19b72f3d3095bb225a4d6f422b4ff","original_commit_id":"6b5270277cc19b72f3d3095bb225a4d6f422b4ff","user":{"login":"burner","id":13327,"avatar_url":"https://avatars.githubusercontent.com/u/13327?v=3","gravatar_id":"","url":"https://api.github.com/users/burner","html_url":"https://github.com/burner","followers_url":"https://api.github.com/users/burner/followers","following_url":"https://api.github.com/users/burner/following{/other_user}","gists_url":"https://api.github.com/users/burner/gists{/gist_id}","starred_url":"https://api.github.com/users/burner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/burner/subscriptions","organizations_url":"https://api.github.com/users/burner/orgs","repos_url":"https://api.github.com/users/burner/repos","events_url":"https://api.github.com/users/burner/events{/privacy}","received_events_url":"https://api.github.com/users/burner/received_events","type":"User","site_admin":false},"body":"that is the point, shouldn't this information be propagated through dmd?","created_at":"2015-06-10T21:22:16Z","updated_at":"2015-06-10T21:22:16Z","html_url":"https://github.com/D-Programming-Language/phobos/pull/3398#discussion_r32168024","pull_request_url":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/3398","_links":{"self":{"href":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/comments/32168024"},"html":{"href":"https://github.com/D-Programming-Language/phobos/pull/3398#discussion_r32168024"},"pull_request":{"href":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/3398"}}},"pull_request":{"url":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/3398","id":37316735,"html_url":"https://github.com/D-Programming-Language/phobos/pull/3398","diff_url":"https://github.com/D-Programming-Language/phobos/pull/3398.diff","patch_url":"https://github.com/D-Programming-Language/phobos/pull/3398.patch","issue_url":"https://api.github.com/repos/D-Programming-Language/phobos/issues/3398","number":3398,"state":"open","locked":false,"title":"Add etc.c.odbc","user":{"login":"andralex","id":566679,"avatar_url":"https://avatars.githubusercontent.com/u/566679?v=3","gravatar_id":"","url":"https://api.github.com/users/andralex","html_url":"https://github.com/andralex","followers_url":"https://api.github.com/users/andralex/followers","following_url":"https://api.github.com/users/andralex/following{/other_user}","gists_url":"https://api.github.com/users/andralex/gists{/gist_id}","starred_url":"https://api.github.com/users/andralex/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andralex/subscriptions","organizations_url":"https://api.github.com/users/andralex/orgs","repos_url":"https://api.github.com/users/andralex/repos","events_url":"https://api.github.com/users/andralex/events{/privacy}","received_events_url":"https://api.github.com/users/andralex/received_events","type":"User","site_admin":false},"body":"Just a little testing with iODBC - could folks on other OSs give it a shot? There are plenty of simple samples online, I went through this:\r\n\r\n```D\r\nimport etc.c.odbc.sql;\r\nimport etc.c.odbc.sqlext;\r\nimport std.stdio;\r\n\r\nint main() {\r\n  SQLHENV env;\r\n  SQLCHAR driver[256];\r\n  SQLCHAR attr[256];\r\n  SQLSMALLINT driver_ret;\r\n  SQLSMALLINT attr_ret;\r\n  SQLUSMALLINT direction;\r\n  SQLRETURN ret;\r\n\r\n  SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);\r\n  SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, cast(void *) SQL_OV_ODBC3, 0);\r\n\r\n  direction = SQL_FETCH_FIRST;\r\n  while(SQL_SUCCEEDED(ret = SQLDrivers(env, direction,\r\n                       driver.ptr, driver.sizeof, &driver_ret,\r\n                       attr.ptr, attr.sizeof, &attr_ret))) {\r\n    direction = SQL_FETCH_NEXT;\r\n    printf(\"%s - %s\\n\", driver.ptr, attr.ptr);\r\n    if (ret == SQL_SUCCESS_WITH_INFO) printf(\"\\tdata truncation\\n\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n```\r\n\r\nRunning with `rdmd -L-lodbc odbctest.d` should print the installed drivers.","created_at":"2015-06-10T01:23:39Z","updated_at":"2015-06-10T21:22:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c663012a512873c1539e491237583a90c05b5873","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/3398/commits","review_comments_url":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/3398/comments","review_comment_url":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/comments{/number}","comments_url":"https://api.github.com/repos/D-Programming-Language/phobos/issues/3398/comments","statuses_url":"https://api.github.com/repos/D-Programming-Language/phobos/statuses/6b5270277cc19b72f3d3095bb225a4d6f422b4ff","head":{"label":"andralex:odbc","ref":"odbc","sha":"6b5270277cc19b72f3d3095bb225a4d6f422b4ff","user":{"login":"andralex","id":566679,"avatar_url":"https://avatars.githubusercontent.com/u/566679?v=3","gravatar_id":"","url":"https://api.github.com/users/andralex","html_url":"https://github.com/andralex","followers_url":"https://api.github.com/users/andralex/followers","following_url":"https://api.github.com/users/andralex/following{/other_user}","gists_url":"https://api.github.com/users/andralex/gists{/gist_id}","starred_url":"https://api.github.com/users/andralex/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andralex/subscriptions","organizations_url":"https://api.github.com/users/andralex/orgs","repos_url":"https://api.github.com/users/andralex/repos","events_url":"https://api.github.com/users/andralex/events{/privacy}","received_events_url":"https://api.github.com/users/andralex/received_events","type":"User","site_admin":false},"repo":{"id":1415983,"name":"phobos","full_name":"andralex/phobos","owner":{"login":"andralex","id":566679,"avatar_url":"https://avatars.githubusercontent.com/u/566679?v=3","gravatar_id":"","url":"https://api.github.com/users/andralex","html_url":"https://github.com/andralex","followers_url":"https://api.github.com/users/andralex/followers","following_url":"https://api.github.com/users/andralex/following{/other_user}","gists_url":"https://api.github.com/users/andralex/gists{/gist_id}","starred_url":"https://api.github.com/users/andralex/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andralex/subscriptions","organizations_url":"https://api.github.com/users/andralex/orgs","repos_url":"https://api.github.com/users/andralex/repos","events_url":"https://api.github.com/users/andralex/events{/privacy}","received_events_url":"https://api.github.com/users/andralex/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/andralex/phobos","description":"Runtime library for the D programming language","fork":true,"url":"https://api.github.com/repos/andralex/phobos","forks_url":"https://api.github.com/repos/andralex/phobos/forks","keys_url":"https://api.github.com/repos/andralex/phobos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/andralex/phobos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/andralex/phobos/teams","hooks_url":"https://api.github.com/repos/andralex/phobos/hooks","issue_events_url":"https://api.github.com/repos/andralex/phobos/issues/events{/number}","events_url":"https://api.github.com/repos/andralex/phobos/events","assignees_url":"https://api.github.com/repos/andralex/phobos/assignees{/user}","branches_url":"https://api.github.com/repos/andralex/phobos/branches{/branch}","tags_url":"https://api.github.com/repos/andralex/phobos/tags","blobs_url":"https://api.github.com/repos/andralex/phobos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/andralex/phobos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/andralex/phobos/git/refs{/sha}","trees_url":"https://api.github.com/repos/andralex/phobos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/andralex/phobos/statuses/{sha}","languages_url":"https://api.github.com/repos/andralex/phobos/languages","stargazers_url":"https://api.github.com/repos/andralex/phobos/stargazers","contributors_url":"https://api.github.com/repos/andralex/phobos/contributors","subscribers_url":"https://api.github.com/repos/andralex/phobos/subscribers","subscription_url":"https://api.github.com/repos/andralex/phobos/subscription","commits_url":"https://api.github.com/repos/andralex/phobos/commits{/sha}","git_commits_url":"https://api.github.com/repos/andralex/phobos/git/commits{/sha}","comments_url":"https://api.github.com/repos/andralex/phobos/comments{/number}","issue_comment_url":"https://api.github.com/repos/andralex/phobos/issues/comments{/number}","contents_url":"https://api.github.com/repos/andralex/phobos/contents/{+path}","compare_url":"https://api.github.com/repos/andralex/phobos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/andralex/phobos/merges","archive_url":"https://api.github.com/repos/andralex/phobos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/andralex/phobos/downloads","issues_url":"https://api.github.com/repos/andralex/phobos/issues{/number}","pulls_url":"https://api.github.com/repos/andralex/phobos/pulls{/number}","milestones_url":"https://api.github.com/repos/andralex/phobos/milestones{/number}","notifications_url":"https://api.github.com/repos/andralex/phobos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/andralex/phobos/labels{/name}","releases_url":"https://api.github.com/repos/andralex/phobos/releases{/id}","created_at":"2011-02-26T21:18:12Z","updated_at":"2015-05-14T19:14:38Z","pushed_at":"2015-06-10T02:12:17Z","git_url":"git://github.com/andralex/phobos.git","ssh_url":"git@github.com:andralex/phobos.git","clone_url":"https://github.com/andralex/phobos.git","svn_url":"https://github.com/andralex/phobos","homepage":"d-programming-language.org","size":44269,"stargazers_count":20,"watchers_count":20,"language":"D","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":3,"forks":2,"open_issues":3,"watchers":20,"default_branch":"master"}},"base":{"label":"D-Programming-Language:master","ref":"master","sha":"e616dd28b6d673eb98573bdfd7e1d4d6e42c3383","user":{"login":"D-Programming-Language","id":565913,"avatar_url":"https://avatars.githubusercontent.com/u/565913?v=3","gravatar_id":"","url":"https://api.github.com/users/D-Programming-Language","html_url":"https://github.com/D-Programming-Language","followers_url":"https://api.github.com/users/D-Programming-Language/followers","following_url":"https://api.github.com/users/D-Programming-Language/following{/other_user}","gists_url":"https://api.github.com/users/D-Programming-Language/gists{/gist_id}","starred_url":"https://api.github.com/users/D-Programming-Language/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/D-Programming-Language/subscriptions","organizations_url":"https://api.github.com/users/D-Programming-Language/orgs","repos_url":"https://api.github.com/users/D-Programming-Language/repos","events_url":"https://api.github.com/users/D-Programming-Language/events{/privacy}","received_events_url":"https://api.github.com/users/D-Programming-Language/received_events","type":"Organization","site_admin":false},"repo":{"id":1257084,"name":"phobos","full_name":"D-Programming-Language/phobos","owner":{"login":"D-Programming-Language","id":565913,"avatar_url":"https://avatars.githubusercontent.com/u/565913?v=3","gravatar_id":"","url":"https://api.github.com/users/D-Programming-Language","html_url":"https://github.com/D-Programming-Language","followers_url":"https://api.github.com/users/D-Programming-Language/followers","following_url":"https://api.github.com/users/D-Programming-Language/following{/other_user}","gists_url":"https://api.github.com/users/D-Programming-Language/gists{/gist_id}","starred_url":"https://api.github.com/users/D-Programming-Language/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/D-Programming-Language/subscriptions","organizations_url":"https://api.github.com/users/D-Programming-Language/orgs","repos_url":"https://api.github.com/users/D-Programming-Language/repos","events_url":"https://api.github.com/users/D-Programming-Language/events{/privacy}","received_events_url":"https://api.github.com/users/D-Programming-Language/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/D-Programming-Language/phobos","description":"The standard library of the D programming language","fork":false,"url":"https://api.github.com/repos/D-Programming-Language/phobos","forks_url":"https://api.github.com/repos/D-Programming-Language/phobos/forks","keys_url":"https://api.github.com/repos/D-Programming-Language/phobos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/D-Programming-Language/phobos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/D-Programming-Language/phobos/teams","hooks_url":"https://api.github.com/repos/D-Programming-Language/phobos/hooks","issue_events_url":"https://api.github.com/repos/D-Programming-Language/phobos/issues/events{/number}","events_url":"https://api.github.com/repos/D-Programming-Language/phobos/events","assignees_url":"https://api.github.com/repos/D-Programming-Language/phobos/assignees{/user}","branches_url":"https://api.github.com/repos/D-Programming-Language/phobos/branches{/branch}","tags_url":"https://api.github.com/repos/D-Programming-Language/phobos/tags","blobs_url":"https://api.github.com/repos/D-Programming-Language/phobos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/D-Programming-Language/phobos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/D-Programming-Language/phobos/git/refs{/sha}","trees_url":"https://api.github.com/repos/D-Programming-Language/phobos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/D-Programming-Language/phobos/statuses/{sha}","languages_url":"https://api.github.com/repos/D-Programming-Language/phobos/languages","stargazers_url":"https://api.github.com/repos/D-Programming-Language/phobos/stargazers","contributors_url":"https://api.github.com/repos/D-Programming-Language/phobos/contributors","subscribers_url":"https://api.github.com/repos/D-Programming-Language/phobos/subscribers","subscription_url":"https://api.github.com/repos/D-Programming-Language/phobos/subscription","commits_url":"https://api.github.com/repos/D-Programming-Language/phobos/commits{/sha}","git_commits_url":"https://api.github.com/repos/D-Programming-Language/phobos/git/commits{/sha}","comments_url":"https://api.github.com/repos/D-Programming-Language/phobos/comments{/number}","issue_comment_url":"https://api.github.com/repos/D-Programming-Language/phobos/issues/comments{/number}","contents_url":"https://api.github.com/repos/D-Programming-Language/phobos/contents/{+path}","compare_url":"https://api.github.com/repos/D-Programming-Language/phobos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/D-Programming-Language/phobos/merges","archive_url":"https://api.github.com/repos/D-Programming-Language/phobos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/D-Programming-Language/phobos/downloads","issues_url":"https://api.github.com/repos/D-Programming-Language/phobos/issues{/number}","pulls_url":"https://api.github.com/repos/D-Programming-Language/phobos/pulls{/number}","milestones_url":"https://api.github.com/repos/D-Programming-Language/phobos/milestones{/number}","notifications_url":"https://api.github.com/repos/D-Programming-Language/phobos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/D-Programming-Language/phobos/labels{/name}","releases_url":"https://api.github.com/repos/D-Programming-Language/phobos/releases{/id}","created_at":"2011-01-15T07:00:06Z","updated_at":"2015-06-08T19:03:00Z","pushed_at":"2015-06-10T20:02:32Z","git_url":"git://github.com/D-Programming-Language/phobos.git","ssh_url":"git@github.com:D-Programming-Language/phobos.git","clone_url":"https://github.com/D-Programming-Language/phobos.git","svn_url":"https://github.com/D-Programming-Language/phobos","homepage":"dlang.org/phobos","size":86259,"stargazers_count":607,"watchers_count":607,"language":"D","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":406,"mirror_url":null,"open_issues_count":82,"forks":406,"open_issues":82,"watchers":607,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/3398"},"html":{"href":"https://github.com/D-Programming-Language/phobos/pull/3398"},"issue":{"href":"https://api.github.com/repos/D-Programming-Language/phobos/issues/3398"},"comments":{"href":"https://api.github.com/repos/D-Programming-Language/phobos/issues/3398/comments"},"review_comments":{"href":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/3398/comments"},"review_comment":{"href":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/D-Programming-Language/phobos/pulls/3398/commits"},"statuses":{"href":"https://api.github.com/repos/D-Programming-Language/phobos/statuses/6b5270277cc19b72f3d3095bb225a4d6f422b4ff"}}}}