driver/dsn.h (121 lines of code) (raw):

/* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ #ifndef __DSN_H__ #define __DSN_H__ #include "EsOdbcDsnBinding.h" #include "util.h" #include "defs.h" #define SUBKEY_ODBCINST "ODBCINST.INI" #define SUBKEY_ODBC "ODBC.INI" /* attribute keywords used in connection strings */ #define ESODBC_DSN_DRIVER "Driver" #define ESODBC_DSN_DESCRIPTION "Description" #define ESODBC_DSN_DSN "DSN" #define ESODBC_DSN_PWD "PWD" #define ESODBC_DSN_UID "UID" #define ESODBC_DSN_API_KEY "APIKey" #define ESODBC_DSN_SAVEFILE "SAVEFILE" #define ESODBC_DSN_FILEDSN "FILEDSN" #define ESODBC_DSN_CLOUD_ID "CloudID" #define ESODBC_DSN_SERVER "Server" #define ESODBC_DSN_PORT "Port" #define ESODBC_DSN_SECURE "Secure" #define ESODBC_DSN_CA_PATH "CAPath" #define ESODBC_DSN_TIMEOUT "Timeout" #define ESODBC_DSN_FOLLOW "Follow" #define ESODBC_DSN_CATALOG "Catalog" #define ESODBC_DSN_PACKING "Packing" #define ESODBC_DSN_COMPRESSION "Compression" #define ESODBC_DSN_MAX_FETCH_SIZE "MaxFetchSize" #define ESODBC_DSN_MAX_BODY_SIZE_MB "MaxBodySizeMB" #define ESODBC_DSN_APPLY_TZ "ApplyTZ" #define ESODBC_DSN_EARLY_EXEC "EarlyExecution" #define ESODBC_DSN_SCI_FLOATS "ScientificFloats" #define ESODBC_DSN_VARCHAR_LIMIT "VarcharLimit" #define ESODBC_DSN_MFIELD_LENIENT "MultiFieldLenient" #define ESODBC_DSN_ESC_PVA "AutoEscapePVA" #define ESODBC_DSN_IDX_INC_FROZEN "IndexIncludeFrozen" #define ESODBC_DSN_PROXY_ENABLED "ProxyEnabled" #define ESODBC_DSN_PROXY_TYPE "ProxyType" #define ESODBC_DSN_PROXY_HOST "ProxyHost" #define ESODBC_DSN_PROXY_PORT "ProxyPort" #define ESODBC_DSN_PROXY_AUTH_ENA "ProxyAuthEnabled" #define ESODBC_DSN_PROXY_AUTH_UID "ProxyAuthUID" #define ESODBC_DSN_PROXY_AUTH_PWD "ProxyAuthPWD" #define ESODBC_DSN_TRACE_ENABLED "TraceEnabled" #define ESODBC_DSN_TRACE_FILE "TraceFile" #define ESODBC_DSN_TRACE_LEVEL "TraceLevel" /* Packing values */ #define ESODBC_DSN_PACK_JSON "JSON" #define ESODBC_DSN_PACK_CBOR "CBOR" /* Compression values */ #define ESODBC_DSN_CMPSS_AUTO "auto" #define ESODBC_DSN_CMPSS_ON "on" #define ESODBC_DSN_CMPSS_OFF "off" /* Floats printing */ #define ESODBC_DSN_FLTS_DEF "default" #define ESODBC_DSN_FLTS_SCI "scientific" #define ESODBC_DSN_FLTS_AUTO "auto" /* stucture to collect all attributes in a connection string */ typedef struct { wstr_st driver; wstr_st description; wstr_st dsn; wstr_st pwd; wstr_st uid; wstr_st api_key; wstr_st savefile; wstr_st filedsn; wstr_st cloud_id; wstr_st server; wstr_st port; wstr_st secure; wstr_st ca_path; wstr_st timeout; wstr_st follow; wstr_st catalog; wstr_st packing; wstr_st compression; wstr_st max_fetch_size; wstr_st max_body_size; wstr_st apply_tz; wstr_st early_exec; wstr_st sci_floats; wstr_st varchar_limit; wstr_st mfield_lenient; wstr_st auto_esc_pva; wstr_st idx_inc_frozen; wstr_st proxy_enabled; wstr_st proxy_type; wstr_st proxy_host; wstr_st proxy_port; wstr_st proxy_auth_enabled; wstr_st proxy_auth_uid; wstr_st proxy_auth_pwd; wstr_st trace_enabled; wstr_st trace_file; wstr_st trace_level; #define ESODBC_DSN_ATTRS_COUNT 37 SQLWCHAR buff[ESODBC_DSN_ATTRS_COUNT * ESODBC_DSN_MAX_ATTR_LEN]; /* DSN reading/writing functions are passed a SQLSMALLINT length param */ #if SHRT_MAX < ESODBC_DSN_ATTRS_COUNT * ESODBC_DSN_MAX_ATTR_LEN #error "attrs buffer too large" #endif } esodbc_dsn_attrs_st; /* assign_dsn_attr() success codes. */ #define DSN_NOT_MATCHED 0 #define DSN_NOT_OVERWRITTEN 1 #define DSN_ASSIGNED 2 #define DSN_OVERWRITTEN 3 void TEST_API init_dsn_attrs(esodbc_dsn_attrs_st *attrs); void assign_dsn_defaults(esodbc_dsn_attrs_st *attrs); BOOL assign_dsn_attr(esodbc_dsn_attrs_st *attrs, wstr_st *keyword, wstr_st *value, BOOL overwrite); BOOL TEST_API parse_00_list(esodbc_dsn_attrs_st *attrs, SQLWCHAR *list00); long TEST_API write_00_list(esodbc_dsn_attrs_st *attrs, SQLWCHAR *list00, size_t cnt00); /* "system" from "system information" (cf. SQLDriverConnect), not as * in User/System DSN */ int system_dsn_exists(wstr_st *dsn); BOOL load_system_dsn(esodbc_dsn_attrs_st *attrs, BOOL overwrite); BOOL write_system_dsn(esodbc_dsn_attrs_st *crr, esodbc_dsn_attrs_st *old); BOOL TEST_API parse_connection_string(esodbc_dsn_attrs_st *attrs, SQLWCHAR *szConnStrIn, SQLSMALLINT cchConnStrIn); long TEST_API write_connection_string(esodbc_dsn_attrs_st *attrs, SQLWCHAR *szConnStrOut, SQLSMALLINT cchConnStrOutMax); void log_installer_err(); size_t copy_installer_errors(wchar_t *err_buff, size_t eb_max); int validate_dsn(esodbc_dsn_attrs_st *attrs, const wchar_t *dsn_str, wchar_t *err_out, size_t eo_max, BOOL try_connect); int prompt_user_config(HWND hwnd, BOOL on_conn, esodbc_dsn_attrs_st *attrs, driver_callback_ft save_cb); /* Uncomment to enable 00-list format (vs. connection string, * `;`/`|`-separated) at the interface with the GUI API. * The .NET framework has an ODBC connection string parser, so the that format * will be used on Windows. */ //#define ESODBC_DSN_API_WITH_00_LIST #endif /* __DSN_H__ */ /* vim: set noet fenc=utf-8 ff=dos sts=0 sw=4 ts=4 : */