diff --git a/build/ba_masktab.vcxproj b/build/ba_masktab.vcxproj index 3831942d1..653d9e9fc 100644 --- a/build/ba_masktab.vcxproj +++ b/build/ba_masktab.vcxproj @@ -13,7 +13,7 @@ {D53794B2-2BDD-4D8F-BEFF-A65DA01D5B03} ba_masktab - 10.0.16299.0 + 10.0.17134.0 @@ -403,6 +403,36 @@ Document + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/ba_masktab.vcxproj.filters b/build/ba_masktab.vcxproj.filters index 8e8240d93..c8cc14e17 100644 --- a/build/ba_masktab.vcxproj.filters +++ b/build/ba_masktab.vcxproj.filters @@ -19,6 +19,9 @@ {d07d5cc7-7455-46b6-a38b-52bf67307d98} + + {753adcac-715d-4825-b50c-58fdf0db114b} + @@ -159,6 +162,9 @@ Mask + + Mask + @@ -384,4 +390,90 @@ Trr + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + + Headers + + \ No newline at end of file diff --git a/lib/sqlapi.lib b/lib/sqlapi.lib index 9e16cfe92..02d83277c 100644 Binary files a/lib/sqlapi.lib and b/lib/sqlapi.lib differ diff --git a/lib/sqlapid.lib b/lib/sqlapid.lib index f26c36c43..52b82071f 100644 Binary files a/lib/sqlapid.lib and b/lib/sqlapid.lib differ diff --git a/libraries/SQLAPI/include/SQLAPI.h b/libraries/SQLAPI/include/SQLAPI.h index dc6b55fc1..88eb88988 100644 --- a/libraries/SQLAPI/include/SQLAPI.h +++ b/libraries/SQLAPI/include/SQLAPI.h @@ -35,8 +35,16 @@ #endif #include #include +#if (defined(_MSC_VER) && _MSC_VER >= 1600) || (defined(__BORLANDC__) && __BORLANDC__ >= 0x0630) || defined(__GNUC__) || defined(__SUNPRO_C) +#define SA_HAVE_STDINT_H +#include +#endif #include +#ifndef SIZE_MAX +#define SIZE_MAX ULONG_MAX +#endif + #ifdef SQLAPI_WINDOWS // 64-bit integer typedef __int64 sa_int64_t; @@ -53,10 +61,7 @@ typedef unsigned long long int sa_uint64_t; #ifdef SA_USE_STL #include -#endif - -#ifndef SIZE_MAX -#define SIZE_MAX UINT_MAX +#include #endif class ISAClient; @@ -115,6 +120,8 @@ typedef SA_SQLite_Client, //! SQL Anywere SA_SQLAnywhere_Client, + //! CubeSQL + SA_CubeSQL_Client, _SA_Client_Reserverd = (int)(((unsigned int)(-1))/2) } SAClient_t; @@ -127,11 +134,31 @@ typedef SA_UserGenerated_Error, //! the Library-generated error SA_Library_Error, - //! DBMS API error occured + //! DBMS API error occurred SA_DBMS_API_Error, _SA_ErrorClass_Reserved = (int)(((unsigned int)(-1))/2) } SAErrorClass_t; +typedef +enum eSALibraryErrorType +{ + SA_Library_Error_Nomem, + SA_Library_Error_ClientNotSet, + SA_Library_Error_ClientNotSupported, + SA_Library_Error_LoadLibraryFails, + SA_Library_Error_GetLibraryVersionFails, + SA_Library_Error_ClienVersionOld, + SA_Library_Error_ClientInitFails, + SA_Library_Error_BindVarNotFound, + SA_Library_Error_FieldNotFound, + SA_Library_Error_UnknownDataType, + SA_Library_Error_UnknownParameterType, + SA_Library_Error_UnknownColumnType, + SA_Library_Error_WrongConversion, + SA_Library_Error_WrongDatetime, + _SA_Library_Error_Reserved = (int)(((unsigned int)(-1)) / 2) +} SALibraryErrorType_t; + typedef enum eSAIsolationLevel { @@ -319,7 +346,7 @@ public: SAString(const wchar_t *lpch, size_t nLength); //! Initializes SAString from unsigned characters (converts to SAChar) SAString(const unsigned char *psz); - //! Special constructor for binary data (no converion to SAChar) + //! Special constructor for binary data (no conversion to SAChar) SAString(const void *pBuffer, size_t nLengthInBytes); // Attributes & Operations @@ -413,12 +440,12 @@ public: //! Remove continuous occurrences of chTarget starting from right void TrimRight(SAChar chTarget); - //! Remove continuous occcurrences of characters in passed string, + //! Remove continuous occurrences of characters in passed string, // starting from right void TrimRight(const SAChar *lpszTargets); //! Remove continuous occurrences of chTarget starting from left void TrimLeft(SAChar chTarget); - //! Remove continuous occcurrences of characters in + //! Remove continuous occurrences of characters in // passed string, starting from left void TrimLeft(const SAChar *lpszTargets); @@ -498,14 +525,14 @@ public: const char *GetUTF8Chars() const; // get string length (in UTF8 characters) size_t GetUTF8CharsLength() const; - // assing UTF8 data + // assign UTF8 data void SetUTF8Chars(const char* szSrc, size_t nSrcLen = SIZE_MAX); #endif // SA_UNICODE // return pointer to const UTF16 string const void *GetUTF16Chars() const; // get string length (in UTF16 characters) size_t GetUTF16CharsLength() const; - // assing UTF16 data + // assign UTF16 data void SetUTF16Chars(const void* szSrc, size_t nSrcLen = SIZE_MAX); // Implementation @@ -539,10 +566,6 @@ protected: public: SAString(const std::string &stringSrc); SAString(const std::wstring &stringSrc); - const SAString &operator=(const std::string &stringSrc); - const SAString &operator=(const std::wstring &stringSrc); - const SAString &operator+=(const std::string &stringSrc); - const SAString &operator+=(const std::wstring &stringSrc); #endif }; @@ -640,7 +663,6 @@ public: private: double m_interval; - unsigned int m_nFraction; // 0..999999999 }; //! Provides support for manipulating date/time values @@ -739,8 +761,12 @@ public: class SQLAPI_API saOptions { +#ifdef SA_USE_STL + std::hash_map *m_pOptions; +#else int m_nOptionCount; SAParam **m_ppOptions; +#endif private: // disable copy constructor @@ -754,6 +780,8 @@ public: SAString &operator[](const SAString &sOptionName); SAString operator[](const SAString &sOptionName) const; + int size() const; + SAString operator[](int nIndex) const; }; //! Represents an unique session with a data source @@ -822,6 +850,8 @@ public: SAString &setOption(const SAString &sOptionName); SAString Option(const SAString &sOptionName) const; + int TotalOptions() const; + SAString Option(int nIndex) const; saAPI *NativeAPI() const SQLAPI_THROW(SAException); saConnectionHandles *NativeHandles() SQLAPI_THROW(SAException); @@ -910,7 +940,8 @@ private: size_t nFieldSize, int nFieldPrecision, int nFieldScale, - bool bFieldRequired); + bool bFieldRequired, + int nTotalFieldCount); void DestroyFields(); // parses sql statement and create bind parameters array if any (In) @@ -1006,6 +1037,8 @@ public: SAString &setOption(const SAString &sOptionName); SAString Option(const SAString &sOptionName) const; + int TotalOptions() const; + SAString Option(int nIndex) const; saCommandHandles *NativeHandles() SQLAPI_THROW(SAException); void setBatchExceptionPreHandler(PreHandleException_t fnHandler, void* pAddlData); @@ -1037,6 +1070,7 @@ class SQLAPI_API SAValueRead friend class Isl3Cursor; friend class IssNCliCursor; friend class IasaCursor; + friend class IcubeSqlCursor; protected: SALongOrLobReaderModes_t m_eReaderMode; @@ -1184,6 +1218,7 @@ class SQLAPI_API SAValue : public SAValueRead friend class Isl3Cursor; friend class IssNCliCursor; friend class IasaCursor; + friend class IcubeSqlCursor; private: bool m_bInternalUseDefault; @@ -1203,6 +1238,12 @@ protected: size_t nCallerMaxSize, void *&pBuf); +private: + // disable copy constructor + SAValue(const SAValue &); + // disable assignment operator + SAValue &operator = (const SAValue &); + public: SAValue(SADataType_t eDataType); virtual ~SAValue(); @@ -1461,6 +1502,8 @@ public: SAString &setOption(const SAString &sOptionName); SAString Option(const SAString &sOptionName) const; + int TotalOptions() const; + SAString Option(int nIndex) const; }; class SQLAPI_API SAException @@ -1515,6 +1558,9 @@ public: SQLAPI_EXCEPTION_HAS_CUSTOM_MEMBERS #endif +public: + SAException& operator=(const SAException &other); + protected: SAErrorClass_t m_eErrorClass; int m_nNativeError; @@ -1569,8 +1615,8 @@ public: }; #define SQLAPI_VER_MAJOR 4 -#define SQLAPI_VER_MINOR 1 -#define SQLAPI_VER_BUILD 5 +#define SQLAPI_VER_MINOR 2 +#define SQLAPI_VER_BUILD 2 #endif // !defined(__SQLAPI_H__) diff --git a/libraries/SQLAPI/include/cubeSqlAPI.h b/libraries/SQLAPI/include/cubeSqlAPI.h new file mode 100644 index 000000000..b105af0d5 --- /dev/null +++ b/libraries/SQLAPI/include/cubeSqlAPI.h @@ -0,0 +1,124 @@ +////////////////////////////////////////////////////////////////////// +// cubeSqlAPI.h +////////////////////////////////////////////////////////////////////// + +#if !defined(__CUBESQLAPI_H__) +#define __CUBESQLAPI_H__ + +#include +#include + +extern void AddCubeSqlSupport(const SAConnection * pCon); +extern void ReleaseCubeSqlSupport(); + +typedef int (*cubesql_connect_t)(csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, int encryption); +typedef int (*cubesql_connect_ssl_t)(csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, char *ssl_certificate_path); +typedef void (*cubesql_disconnect_t)(csqldb *db, int gracefully); +typedef int (*cubesql_execute_t)(csqldb *db, const char *sql); +typedef csqlc* (*cubesql_select_t)(csqldb *db, const char *sql, int unused); +typedef int (*cubesql_commit_t)(csqldb *db); +typedef int (*cubesql_rollback_t)(csqldb *db); +typedef int (*cubesql_bind_t)(csqldb *db, const char *sql, char **colvalue, int *colsize, int *coltype, int ncols); +typedef int (*cubesql_ping_t)(csqldb *db); +typedef void (*cubesql_cancel_t)(csqldb *db); +typedef int (*cubesql_errcode_t)(csqldb *db); +typedef char* (*cubesql_errmsg_t)(csqldb *db); +typedef int64 (*cubesql_changes_t)(csqldb *db); +typedef void (*cubesql_trace_t)(csqldb *db, trace_function trace, void *arg); + +typedef csqlvm* (*cubesql_vmprepare_t)(csqldb *db, const char *sql); +typedef int (*cubesql_vmbind_int_t)(csqlvm *vm, int index, int value); +typedef int (*cubesql_vmbind_double_t)(csqlvm *vm, int index, double value); +typedef int (*cubesql_vmbind_text_t)(csqlvm *vm, int index, char *value, int len); +typedef int (*cubesql_vmbind_blob_t)(csqlvm *vm, int index, void *value, int len); +typedef int (*cubesql_vmbind_null_t)(csqlvm *vm, int index); +typedef int (*cubesql_vmbind_int64_t)(csqlvm *vm, int index, int64 value); +typedef int (*cubesql_vmbind_zeroblob_t)(csqlvm *vm, int index, int len); +typedef int (*cubesql_vmexecute_t)(csqlvm *vm); +typedef csqlc* (*cubesql_vmselect_t)(csqlvm *vm); +typedef int (*cubesql_vmclose_t)(csqlvm *vm); + +typedef int (*cubesql_cursor_numrows_t)(csqlc *c); +typedef int (*cubesql_cursor_numcolumns_t)(csqlc *c); +typedef int (*cubesql_cursor_currentrow_t)(csqlc *c); +typedef int (*cubesql_cursor_seek_t)(csqlc *c, int index); +typedef int (*cubesql_cursor_iseof_t)(csqlc *c); +typedef int (*cubesql_cursor_columntype_t)(csqlc *c, int index); +typedef char* (*cubesql_cursor_field_t)(csqlc *c, int row, int column, int *len); +typedef int64 (*cubesql_cursor_rowid_t)(csqlc *c, int row); +typedef int64 (*cubesql_cursor_int64_t)(csqlc *c, int row, int column, int64 default_value); +typedef int (*cubesql_cursor_int_t)(csqlc *c, int row, int column, int default_value); +typedef double (*cubesql_cursor_double_t)(csqlc *c, int row, int column, double default_value); +typedef char* (*cubesql_cursor_cstring_t)(csqlc *c, int row, int column); +typedef char* (*cubesql_cursor_cstring_static_t)(csqlc *c, int row, int column, char *static_buffer, int bufferlen); +typedef void (*cubesql_cursor_free_t)(csqlc *c); + +// API declarations +class SQLAPI_API cubeSqlAPI : public saAPI +{ +public: + cubeSqlAPI(); + + cubesql_connect_t cubesql_connect; + cubesql_connect_ssl_t cubesql_connect_ssl; + cubesql_disconnect_t cubesql_disconnect; + cubesql_execute_t cubesql_execute; + cubesql_select_t cubesql_select; + cubesql_commit_t cubesql_commit; + cubesql_rollback_t cubesql_rollback; + cubesql_bind_t cubesql_bind; + cubesql_ping_t cubesql_ping; + cubesql_cancel_t cubesql_cancel; + cubesql_errcode_t cubesql_errcode; + cubesql_errmsg_t cubesql_errmsg; + cubesql_changes_t cubesql_changes; + cubesql_trace_t cubesql_trace; + + cubesql_vmprepare_t cubesql_vmprepare; + cubesql_vmbind_int_t cubesql_vmbind_int; + cubesql_vmbind_double_t cubesql_vmbind_double; + cubesql_vmbind_text_t cubesql_vmbind_text; + cubesql_vmbind_blob_t cubesql_vmbind_blob; + cubesql_vmbind_null_t cubesql_vmbind_null; + cubesql_vmbind_int64_t cubesql_vmbind_int64; + cubesql_vmbind_zeroblob_t cubesql_vmbind_zeroblob; + cubesql_vmexecute_t cubesql_vmexecute; + cubesql_vmselect_t cubesql_vmselect; + cubesql_vmclose_t cubesql_vmclose; + + cubesql_cursor_numrows_t cubesql_cursor_numrows; + cubesql_cursor_numcolumns_t cubesql_cursor_numcolumns; + cubesql_cursor_currentrow_t cubesql_cursor_currentrow; + cubesql_cursor_seek_t cubesql_cursor_seek; + cubesql_cursor_iseof_t cubesql_cursor_iseof; + cubesql_cursor_columntype_t cubesql_cursor_columntype; + cubesql_cursor_field_t cubesql_cursor_field; + cubesql_cursor_rowid_t cubesql_cursor_rowid; + cubesql_cursor_int64_t cubesql_cursor_int64; + cubesql_cursor_int_t cubesql_cursor_int; + cubesql_cursor_double_t cubesql_cursor_double; + cubesql_cursor_cstring_t cubesql_cursor_cstring; + cubesql_cursor_cstring_static_t cubesql_cursor_cstring_static; + cubesql_cursor_free_t cubesql_cursor_free; +}; + +class SQLAPI_API cubeSqlConnectionHandles : public saConnectionHandles +{ +public: + cubeSqlConnectionHandles(); + + csqldb *pDb; +}; + +class SQLAPI_API cubeSqlCommandHandles : public saCommandHandles +{ +public: + cubeSqlCommandHandles(); + + csqlvm *pVm; + csqlc *pC; +}; + +extern cubeSqlAPI g_cubeSqlAPI; + +#endif //__CUBESQLAPI_H__ diff --git a/libraries/SQLAPI/include/cubesql/cubesql.h b/libraries/SQLAPI/include/cubesql/cubesql.h new file mode 100644 index 000000000..d840d8363 --- /dev/null +++ b/libraries/SQLAPI/include/cubesql/cubesql.h @@ -0,0 +1,177 @@ +/* + * cubesql.h + * + * This file is the public interface for the cubeSQL Server SDK. + * You just need to include this header file in your projects. + * + * (c) 2006-2011 SQLabs s.r.l. -- All Rights Reserved + * Author: Marco Bambini (MB) + * + */ + +#ifndef CUBESQLSDK_H +#define CUBESQLSDK_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef CUBESQL_BUILD_DLL +#define CUBESQL_APIEXPORT __declspec(dllexport) +#else +#define CUBESQL_APIEXPORT +#endif + +// custom boolean values +#ifndef kTRUE +#define kTRUE 1 +#endif + +#ifndef kFALSE +#define kFALSE 0 +#endif + +// default values +#define kDEFAULT_PORT 4430 +#define kDEFAULT_TIMEOUT 12 +#define kNOERR 0 +#define kERR -1 + +// client side errors +#define kMEMORY_ERROR -2 +#define kPARAMETER_ERROR -3 +#define kPROTOCOL_ERROR -4 +#define kZLIB_ERROR -5 +#define kSSL_ERROR -6 +#define kSSL_CERT_ERROR -7 + +// encryption flags used in cubesql_connect +#define kAESNONE 0 +#define kAES128 2 +#define kAES192 3 +#define kAES256 4 +#define kSSL 8 +#define kSSL_AES128 kSSL+kAES128 +#define kSSL_AES192 kSSL+kAES192 +#define kSSL_AES256 kSSL+kAES256 + +// flag used in cubesql_cursor_getfield +#define kCUBESQL_COLNAME 0 +#define kCUBESQL_CURROW -1 +#define kCUBESQL_COLTABLE -2 +#define kCUBESQL_ROWID -666 + +// flag used in cubesql_cursor_seek +#define kCUBESQL_SEEKNEXT -2 +#define kCUBESQL_SEEKFIRST -3 +#define kCUBESQL_SEEKLAST -4 +#define kCUBESQL_SEEKPREV -5 + +// SSL +#define kSSL_LIBRARY_PATH 1 +#define kCRYPTO_LIBRARY_PATH 2 + +#ifndef int64 +#ifdef WIN32 +typedef __int64 int64; +#else +typedef long long int int64; +#endif +#endif + +// column types coming from the server +enum { + TYPE_None = 0, + TYPE_Integer = 1, + TYPE_Float = 2, + TYPE_Text = 3, + TYPE_Blob = 4, + TYPE_Boolean = 5, + TYPE_Date = 6, + TYPE_Time = 7, + TYPE_Timestamp = 8, + TYPE_Currency = 9 +}; + +// column types to specify in the cubesql_bind command (coltype) +#define kBIND_INTEGER 1 +#define kBIND_DOUBLE 2 +#define kBIND_TEXT 3 +#define kBIND_BLOB 4 +#define kBIND_NULL 5 +#define kBIND_INT64 8 +#define kBIND_ZEROBLOB 9 + +// define opaque datatypes +typedef struct csqldb csqldb; +typedef struct csqlc csqlc; +typedef struct csqlvm csqlvm; +typedef void (*trace_function) (const char*, void*); + +// function prototypes +CUBESQL_APIEXPORT int cubesql_connect (csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, int encryption); +CUBESQL_APIEXPORT int cubesql_connect_ssl (csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, char *ssl_certificate_path); +CUBESQL_APIEXPORT void cubesql_disconnect (csqldb *db, int gracefully); +CUBESQL_APIEXPORT int cubesql_execute (csqldb *db, const char *sql); +CUBESQL_APIEXPORT csqlc *cubesql_select (csqldb *db, const char *sql, int unused); +CUBESQL_APIEXPORT int cubesql_commit (csqldb *db); +CUBESQL_APIEXPORT int cubesql_rollback (csqldb *db); +CUBESQL_APIEXPORT int cubesql_bind (csqldb *db, const char *sql, char **colvalue, int *colsize, int *coltype, int ncols); +CUBESQL_APIEXPORT int cubesql_ping (csqldb *db); +CUBESQL_APIEXPORT void cubesql_cancel (csqldb *db); +CUBESQL_APIEXPORT int cubesql_errcode (csqldb *db); +CUBESQL_APIEXPORT char *cubesql_errmsg (csqldb *db); +CUBESQL_APIEXPORT int64 cubesql_changes (csqldb *db); +CUBESQL_APIEXPORT void cubesql_trace (csqldb *db, trace_function trace, void *arg); + +CUBESQL_APIEXPORT csqlvm *cubesql_vmprepare (csqldb *db, const char *sql); +CUBESQL_APIEXPORT int cubesql_vmbind_int (csqlvm *vm, int index, int value); +CUBESQL_APIEXPORT int cubesql_vmbind_double (csqlvm *vm, int index, double value); +CUBESQL_APIEXPORT int cubesql_vmbind_text (csqlvm *vm, int index, char *value, int len); +CUBESQL_APIEXPORT int cubesql_vmbind_blob (csqlvm *vm, int index, void *value, int len); +CUBESQL_APIEXPORT int cubesql_vmbind_null (csqlvm *vm, int index); +CUBESQL_APIEXPORT int cubesql_vmbind_int64 (csqlvm *vm, int index, int64 value); +CUBESQL_APIEXPORT int cubesql_vmbind_zeroblob (csqlvm *vm, int index, int len); +CUBESQL_APIEXPORT int cubesql_vmexecute (csqlvm *vm); +CUBESQL_APIEXPORT csqlc *cubesql_vmselect (csqlvm *vm); +CUBESQL_APIEXPORT int cubesql_vmclose (csqlvm *vm); + +CUBESQL_APIEXPORT int cubesql_cursor_numrows (csqlc *c); +CUBESQL_APIEXPORT int cubesql_cursor_numcolumns (csqlc *c); +CUBESQL_APIEXPORT int cubesql_cursor_currentrow (csqlc *c); +CUBESQL_APIEXPORT int cubesql_cursor_seek (csqlc *c, int index); +CUBESQL_APIEXPORT int cubesql_cursor_iseof (csqlc *c); +CUBESQL_APIEXPORT int cubesql_cursor_columntype (csqlc *c, int index); +CUBESQL_APIEXPORT char *cubesql_cursor_field (csqlc *c, int row, int column, int *len); +CUBESQL_APIEXPORT int64 cubesql_cursor_rowid (csqlc *c, int row); +CUBESQL_APIEXPORT int64 cubesql_cursor_int64 (csqlc *c, int row, int column, int64 default_value); +CUBESQL_APIEXPORT int cubesql_cursor_int (csqlc *c, int row, int column, int default_value); +CUBESQL_APIEXPORT double cubesql_cursor_double (csqlc *c, int row, int column, double default_value); +CUBESQL_APIEXPORT char *cubesql_cursor_cstring (csqlc *c, int row, int column); +CUBESQL_APIEXPORT char *cubesql_cursor_cstring_static (csqlc *c, int row, int column, char *static_buffer, int bufferlen); +CUBESQL_APIEXPORT void cubesql_cursor_free (csqlc *c); + +// private functions +int cubesql_connect_token (csqldb **db, const char *host, int port, const char *username, const char *password, + int timeout, int encryption, char *token, int useOldProtocol, const char *ssl_certificate, + const char *root_certificate, const char *ssl_certificate_password, const char *ssl_chiper_list); +int cubesql_connect_old_protocol (csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, int encryption); +void cubesql_clear_errors (csqldb *db); +csqldb *cubesql_cursor_db (csqlc *cursor); +csqlc *cubesql_cursor_create (csqldb *db, int nrows, int ncolumns, int *types, char **names); +int cubesql_cursor_addrow (csqlc *cursor, char **row, int *len); +int cubesql_cursor_columntypebind (csqlc *c, int index); +void cubesql_setuserptr (csqldb *db, void *userptr); +void *cubesql_getuserptr (csqldb *db); +void cubesql_settoken (csqldb *db, char *token); +void cubesql_sethostverification (csqldb *db, char *hostverification); +char *cubesql_gettoken (csqldb *db); +void cubesql_setpath (int type, char *path); +void cubesql_seterror (csqldb *db, int errcode, char *errmsg); +const char *cubesql_sslversion (void); + +#ifdef __cplusplus +} /* End of the 'extern "C"' block */ +#endif + +#endif diff --git a/libraries/SQLAPI/include/ibase/ib_util.h b/libraries/SQLAPI/include/ibase/ib_util.h index d0bc1828e..a63876bca 100644 --- a/libraries/SQLAPI/include/ibase/ib_util.h +++ b/libraries/SQLAPI/include/ibase/ib_util.h @@ -3,35 +3,13 @@ * MODULE: ib_util.h * DESCRIPTION: Prototype header file for ib_util.c * - * The contents of this file are subject to the Interbase Public - * License Version 1.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy - * of the License at http://www.Inprise.com/IPL.html - * - * Software distributed under the License is distributed on an - * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express - * or implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code was created by Inprise Corporation - * and its predecessors. Portions created by Inprise Corporation are - * Copyright (C) Inprise Corporation. - * + * Copyright (C) 1986-2010 Embarcadero Technologies Inc. * All Rights Reserved. - * Contributor(s): ______________________________________. */ #ifndef _IB_UTIL_H #define _IB_UTIL_H -#ifdef __cplusplus -extern "C" { -#endif - -extern void *ib_util_malloc(long); - -#ifdef __cplusplus -} /* extern "C" */ -#endif +extern void * ib_util_malloc (int); #endif /* _IB_UTIL_H */ diff --git a/libraries/SQLAPI/include/ibase/ibase.h b/libraries/SQLAPI/include/ibase/ibase.h index 115dd5a33..00fb93423 100644 --- a/libraries/SQLAPI/include/ibase/ibase.h +++ b/libraries/SQLAPI/include/ibase/ibase.h @@ -2,49 +2,17 @@ * MODULE: ibase.h * DESCRIPTION: OSRI entrypoints and defines * - * The contents of this file are subject to the Interbase Public - * License Version 1.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy - * of the License at http://www.Inprise.com/IPL.html - * - * Software distributed under the License is distributed on an - * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express - * or implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The Original Code was created by Inprise Corporation - * and its predecessors. Portions created by Inprise Corporation are - * Copyright (C) Inprise Corporation. - * + * Copyright (C) 1986-2010 Embarcadero Technologies Inc. * All Rights Reserved. - * Contributor(s): ______________________________________. - * - * 2001.07.28: John Bellardo: Added blr_skip - * 2001.09.18: Ann Harrison: New info codes - * 17-Oct-2001 Mike Nordell: CPU affinity - * 2001-04-16 Paul Beach: ISC_TIME_SECONDS_PRECISION_SCALE modified for HP10 - * Compiler Compatibility - * 2002.02.15 Sean Leyne - Code Cleanup, removed obsolete ports: - * - EPSON, XENIX, MAC (MAC_AUX), Cray and OS/2 - * 2002.10.29 Nickolay Samofatov: Added support for savepoints - * - * 2002.10.29 Sean Leyne - Removed support for obsolete IPX/SPX Protocol - * - * 2006.09.06 Steve Boyd - Added various prototypes required by Cobol ESQL - * isc_embed_dsql_length - * isc_event_block_a - * isc_sqlcode_s - * isc_embed_dsql_fetch_a - * isc_event_block_s - * isc_baddress - * isc_baddress_s - * */ -#ifndef JRD_IBASE_H -#define JRD_IBASE_H +#ifndef _JRD_IBASE_H_ +#define _JRD_IBASE_H_ + +#ifndef HARBOR_MERGE +#define HARBOR_MERGE +#endif -#define FB_API_VER 20 #define isc_version4 #define ISC_TRUE 1 @@ -54,27 +22,34 @@ #define ISC__FALSE ISC_FALSE #endif -#define ISC_FAR +/* UNIX 64-bit platform defines, if needed +#if (defined __osf__ && defined __alpha) || \ + (defined __sparc && defined __sparcv9) || \ + (defined __APPLE_CC__ && defined __x86_64__) || \ + (defined LINUX && defined __x86_64__) + */ +#define ISC_LONG int +#define ISC_ULONG unsigned int -#if defined _MSC_VER && _MSC_VER >= 1300 -#define FB_API_DEPRECATED __declspec(deprecated) -#elif defined __GNUC__ && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)) -#define FB_API_DEPRECATED __attribute__((__deprecated__)) -#else -#define FB_API_DEPRECATED +#ifndef ISC_BOOLEAN +#define ISC_BOOLEAN signed short #endif +#define ISC_USHORT unsigned short - -#ifndef INCLUDE_TYPES_PUB_H -#define INCLUDE_TYPES_PUB_H - -#include - -#if defined(__GNUC__) -#include +#if (defined _WIN32 || defined _WIN64) +#include +#if (defined __BORLANDC__ && __BORLANDC__ >= 0x0560) +#include +#endif #else - -#if !defined(_INTPTR_T_DEFINED) +#include +#endif +#if (defined(__BORLANDC__) && defined(__WIN32__)) +typedef long ISC_STATUS; +#elif (defined(__BORLANDC__) && defined(_WIN64)) +typedef long long ISC_STATUS; +#else +#if !defined(_INTPTR_T_DEFINED) && !defined(SA_HAVE_STDINT_H) #if defined(_WIN64) typedef __int64 intptr_t; typedef unsigned __int64 uintptr_t; @@ -83,748 +58,863 @@ typedef long intptr_t; typedef unsigned long uintptr_t; #endif #endif - -#endif - -#if defined(_LP64) || defined(__LP64__) || defined(__arch64__) || defined(_WIN64) -typedef unsigned int FB_API_HANDLE; -#else -typedef void* FB_API_HANDLE; -#endif - typedef intptr_t ISC_STATUS; - -#define ISC_STATUS_LENGTH 20 -typedef ISC_STATUS ISC_STATUS_ARRAY[ISC_STATUS_LENGTH]; - -#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) - #define ISC_EXPORT __stdcall - #define ISC_EXPORT_VARARG __cdecl -#else - #define ISC_EXPORT - #define ISC_EXPORT_VARARG #endif -#if defined(_LP64) || defined(__LP64__) || defined(__arch64__) -typedef int ISC_LONG; -typedef unsigned int ISC_ULONG; +/* START CONVERT TAG */ +#define DSQL_close 1 +#define DSQL_drop 2 +#define DSQL_cancel 4 + +#define METADATALENGTH 68 + +/* END CONVERT TAG */ + +/******************************************************************/ +/* Define type, export and other stuff based on c/c++ and Windows */ +/******************************************************************/ + +#if (defined(_MSC_VER) && defined(_WIN32)) || \ + (defined(__BORLANDC__) && (defined(__WIN32__) || defined(__OS2__))) || \ + (defined(_WIN64)) +#define ISC_FAR +#define ISC_EXPORT __stdcall +#define ISC_EXPORT_VARARG __cdecl +typedef __int64 ISC_INT64; +typedef unsigned __int64 ISC_UINT64; +#define ISC_INT64_DEFINED +#else /* Not Windows/NT */ +#if (defined(__IBMC__) && defined(__OS2__)) +#define ISC_FAR +#define ISC_EXPORT _System +#define ISC_EXPORT_VARARG ISC_EXPORT +#else /* not IBM C Set++ for OS/2 */ +#if ( defined( _Windows) || defined( _WINDOWS)) +#define ISC_FAR +#define ISC_EXPORT ISC_FAR __cdecl __export +#define ISC_EXPORT_VARARG ISC_EXPORT +#else /* Not Windows/NT, OS/2 or Windows */ +#define ISC_FAR +#define ISC_EXPORT +#define ISC_EXPORT_VARARG +#endif /* Windows and Not Windows/NT or OS/2 */ +#endif /* IBM C Set++ for OS/2 */ +#endif /* Windows/NT */ + +/*******************************************************************/ +/* 64 bit Integers */ +/*******************************************************************/ + +#ifndef ISC_INT64_DEFINED +typedef long long int ISC_INT64; +typedef unsigned long long int ISC_UINT64; #else -typedef signed long ISC_LONG; -typedef unsigned long ISC_ULONG; +#undef ISC_INT64_DEFINED #endif -typedef signed short ISC_SHORT; -typedef unsigned short ISC_USHORT; -typedef unsigned char ISC_UCHAR; -typedef char ISC_SCHAR; +/*******************************************************************/ +/* Time & Date Support */ +/*******************************************************************/ -#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) && !defined(__GNUC__) -typedef __int64 ISC_INT64; -typedef unsigned __int64 ISC_UINT64; -#else -typedef long long int ISC_INT64; -typedef unsigned long long int ISC_UINT64; -#endif - -#ifndef ISC_TIMESTAMP_DEFINED -typedef int ISC_DATE; -typedef unsigned int ISC_TIME; -typedef struct -{ - ISC_DATE timestamp_date; - ISC_TIME timestamp_time; +#ifndef _ISC_TIMESTAMP_ +typedef ISC_LONG ISC_DATE; +typedef ISC_ULONG ISC_TIME; +typedef struct isc_timestamp{ + ISC_DATE timestamp_date; + ISC_TIME timestamp_time; } ISC_TIMESTAMP; -#define ISC_TIMESTAMP_DEFINED -#endif +#define _ISC_TIMESTAMP_ 1 +#endif -struct GDS_QUAD_t { - ISC_LONG gds_quad_high; - ISC_ULONG gds_quad_low; -}; - -typedef struct GDS_QUAD_t GDS_QUAD; -typedef struct GDS_QUAD_t ISC_QUAD; - -#define isc_quad_high gds_quad_high -#define isc_quad_low gds_quad_low - -#endif - -/********************************/ -/* Firebird Handle Definitions */ -/********************************/ - -typedef FB_API_HANDLE isc_att_handle; -typedef FB_API_HANDLE isc_blob_handle; -typedef FB_API_HANDLE isc_db_handle; -typedef FB_API_HANDLE isc_req_handle; -typedef FB_API_HANDLE isc_stmt_handle; -typedef FB_API_HANDLE isc_svc_handle; -typedef FB_API_HANDLE isc_tr_handle; -typedef void (* isc_callback) (); -typedef ISC_LONG isc_resv_handle; - -typedef void (*ISC_PRINT_CALLBACK) (void*, ISC_SHORT, const char*); -typedef void (*ISC_VERSION_CALLBACK)(void*, const char*); -typedef void (*ISC_EVENT_CALLBACK)(void*, ISC_USHORT, const ISC_UCHAR*); +#define ISC_TIME_SECONDS_PRECISION 10000L +#define ISC_TIME_SECONDS_PRECISION_SCALE -4 /*******************************************************************/ /* Blob id structure */ /*******************************************************************/ -#if !(defined __cplusplus) -typedef GDS_QUAD GDS__QUAD; -#endif /* !(defined __cplusplus) */ +typedef struct { + ISC_LONG gds_quad_high; + unsigned ISC_LONG gds_quad_low; +} GDS_QUAD; +//#if !(defined __cplusplus || defined DEFINED_GDS_QUAD) +#if !(defined DEFINED_GDS_QUAD) +typedef GDS_QUAD GDS__QUAD; +#define DEFINED_GDS_QUAD +#endif /* !(defined __cplusplus) */ -typedef struct -{ - short array_bound_lower; - short array_bound_upper; +#define ISC_QUAD GDS_QUAD +#define isc_quad_high gds_quad_high +#define isc_quad_low gds_quad_low + +typedef struct { + short array_bound_lower; + short array_bound_upper; } ISC_ARRAY_BOUND; -typedef struct -{ - ISC_UCHAR array_desc_dtype; - ISC_SCHAR array_desc_scale; - unsigned short array_desc_length; - ISC_SCHAR array_desc_field_name[32]; - ISC_SCHAR array_desc_relation_name[32]; - short array_desc_dimensions; - short array_desc_flags; - ISC_ARRAY_BOUND array_desc_bounds[16]; -} ISC_ARRAY_DESC; +typedef struct { + short array_desc_version; + unsigned char array_desc_dtype; + unsigned char array_desc_subtype; + char array_desc_scale; + unsigned short array_desc_length; + char array_desc_field_name [METADATALENGTH]; + char array_desc_relation_name [METADATALENGTH]; + short array_desc_dimensions; + short array_desc_flags; + ISC_ARRAY_BOUND array_desc_bounds [16]; +} ISC_ARRAY_DESC_V2; -typedef struct -{ - short blob_desc_subtype; - short blob_desc_charset; - short blob_desc_segment_size; - ISC_UCHAR blob_desc_field_name[32]; - ISC_UCHAR blob_desc_relation_name[32]; -} ISC_BLOB_DESC; +#define ARR_DESC_VERSION2 2 +#define ARR_DESC_CURRENT_VERSION ARR_DESC_VERSION2 +typedef struct { + short blob_desc_version; + short blob_desc_subtype; + short blob_desc_charset; + short blob_desc_segment_size; + unsigned char blob_desc_field_name [METADATALENGTH]; + unsigned char blob_desc_relation_name [METADATALENGTH]; +} ISC_BLOB_DESC_V2; + +#define BLB_DESC_VERSION2 2 +#define BLB_DESC_CURRENT_VERSION BLB_DESC_VERSION2 + +/*********************************/ +/* Descriptor control structure */ +/*********************************/ +typedef struct isc_dsc { + unsigned char dsc_version; + unsigned char dsc_dtype; + char dsc_scale; + char dsc_precision; + unsigned short dsc_length; + short dsc_sub_type; + unsigned short dsc_flags; + short dsc_encryption; + unsigned char *dsc_address; +} ISC_DSC; + +#define DSC_VERSION2 2 +#define DSC_CURRENT_VERSION DSC_VERSION2 + +#define DSC_VERSION1_TO_CURRENT 0 +#define DSC_CURRENT_TO_VERSION1 1 + +/* values for dsc_flags */ +/* Note: DSC_null is only reliably set for local variables + (blr_variable) */ +#define DSC_null 1 +#define DSC_no_subtype 2 /* dsc has no sub type specified */ +#define DSC_nullable 4 /* not stored. instead, is derived + from metadata primarily to flag + SQLDA (in DSQL) */ +#define DSC_system 8 /* dsc for system field */ + +/* Overload text typing information into the dsc_sub_type field. + See intl.h for definitions of text types */ + +#ifndef dsc_ttype +#define dsc_ttype dsc_sub_type +#endif + +#define DSC_GET_CHARSET(dsc) (((dsc)->dsc_ttype) & 0x00FF) +#define DSC_GET_COLLATE(dsc) (((dsc)->dsc_ttype) >> 8) + + /***************************/ /* Blob control structure */ /***************************/ -typedef struct isc_blob_ctl -{ - ISC_STATUS (* ctl_source)(); /* Source filter */ - struct isc_blob_ctl* ctl_source_handle; /* Argument to pass to source filter */ - short ctl_to_sub_type; /* Target type */ - short ctl_from_sub_type; /* Source type */ - unsigned short ctl_buffer_length; /* Length of buffer */ - unsigned short ctl_segment_length; /* Length of current segment */ - unsigned short ctl_bpb_length; /* Length of blob parameter block */ - /* Internally, this is const UCHAR*, but this public struct probably can't change. */ - ISC_SCHAR* ctl_bpb; /* Address of blob parameter block */ - ISC_UCHAR* ctl_buffer; /* Address of segment buffer */ - ISC_LONG ctl_max_segment; /* Length of longest segment */ - ISC_LONG ctl_number_segments; /* Total number of segments */ - ISC_LONG ctl_total_length; /* Total length of blob */ - ISC_STATUS* ctl_status; /* Address of status vector */ - long ctl_data[8]; /* Application specific data */ -} * ISC_BLOB_CTL; +typedef struct isc_blob_ctl{ + ISC_STATUS (ISC_FAR *ctl_source)(); /* Source filter */ + struct isc_blob_ctl ISC_FAR *ctl_source_handle; /* Argument to pass to source */ + /* filter */ + short ctl_to_sub_type; /* Target type */ + short ctl_from_sub_type; /* Source type */ + unsigned short ctl_buffer_length; /* Length of buffer */ + unsigned short ctl_segment_length; /* Length of current segment */ + unsigned short ctl_bpb_length; /* Length of blob parameter */ + /* block */ + char ISC_FAR *ctl_bpb; /* Address of blob parameter */ + /* block */ + unsigned char ISC_FAR *ctl_buffer; /* Address of segment buffer */ + ISC_LONG ctl_max_segment; /* Length of longest segment */ + ISC_LONG ctl_number_segments; /* Total number of segments */ + ISC_LONG ctl_total_length; /* Total length of blob */ + ISC_STATUS ISC_FAR *ctl_status; /* Address of status vector */ +#if (defined(__BORLANDC__) && defined(__WIN32__)) + long ctl_data [8]; /* Application specific data */ +#elif (defined(__BORLANDC__) && defined(_WIN64)) + long long ctl_data [8]; +#else + intptr_t ctl_data [8]; /* Application specific data */ +#endif +} ISC_FAR *ISC_BLOB_CTL; /***************************/ -/* Blob stream definitions */ +/* Blob stream definitions */ /***************************/ -typedef struct bstream -{ - isc_blob_handle bstr_blob; /* Blob handle */ - ISC_SCHAR * bstr_buffer; /* Address of buffer */ - ISC_SCHAR * bstr_ptr; /* Next character */ - short bstr_length; /* Length of buffer */ - short bstr_cnt; /* Characters in buffer */ - char bstr_mode; /* (mode) ? OUTPUT : INPUT */ +typedef struct bstream { + void ISC_FAR *bstr_blob; /* Blob handle */ + char ISC_FAR *bstr_buffer; /* Address of buffer */ + char ISC_FAR *bstr_ptr; /* Next character */ + short bstr_length; /* Length of buffer */ + short bstr_cnt; /* Characters in buffer */ + char bstr_mode; /* (mode) ? OUTPUT : INPUT */ } BSTREAM; -/* Three ugly macros, one even using octal radix... sigh... */ #define getb(p) (--(p)->bstr_cnt >= 0 ? *(p)->bstr_ptr++ & 0377: BLOB_get (p)) #define putb(x,p) (((x) == '\n' || (!(--(p)->bstr_cnt))) ? BLOB_put ((x),p) : ((int) (*(p)->bstr_ptr++ = (unsigned) (x)))) #define putbx(x,p) ((!(--(p)->bstr_cnt)) ? BLOB_put ((x),p) : ((int) (*(p)->bstr_ptr++ = (unsigned) (x)))) + -/********************************************************************/ -/* CVC: Public blob interface definition held in val.h. */ -/* For some unknown reason, it was only documented in langRef */ -/* and being the structure passed by the engine to UDFs it never */ -/* made its way into this public definitions file. */ -/* Being its original name "blob", I renamed it blobcallback here. */ -/* I did the full definition with the proper parameters instead of */ -/* the weak C declaration with any number and type of parameters. */ -/* Since the first parameter -BLB- is unknown outside the engine, */ -/* it's more accurate to use void* than int* as the blob pointer */ -/********************************************************************/ +/*********************************************************************** + * Older and obsolete XSQLVAR_V1, ISC_BLOB_DESC, ISC_ARRAY_DESC structures. + * NOTE: The older structures above are now deprecated and are + * provided here only for backward compatibility. + * Please refrain from using these old structures. + * It is strongly recommended to use the newer SQLDA version + * and related XSQLVAR, ISC_BLOB_DESC_V2, ISC_ARRAY_DESC_V2 structures. + ***********************************************************************/ +typedef struct { + short sqltype; /* datatype of field */ + short sqlscale; /* scale factor */ + short sqlsubtype; /* datatype subtype */ + short sqllen; /* length of data area */ + char ISC_FAR *sqldata; /* address of data */ + short ISC_FAR *sqlind; /* address of indicator variable */ + short sqlname_length; /* length of sqlname field */ + char sqlname [32]; /* name of field, name length + space */ + /* for NULL */ + short relname_length; /* length of relation name */ + char relname [32]; /* field's relation name + space for */ + /* NULL */ + short ownname_length; /* length of owner name */ + char ownname [32]; /* relation's owner name + space for */ + /* NULL */ + short aliasname_length; /* length of alias name */ + char aliasname [32]; /* relation's alias name + space for */ + /* NULL */ +} XSQLVAR_V1; +#define SQLDA_VERSION1 1 -#if !defined(JRD_VAL_H) && !defined(REQUESTER) -/* Blob passing structure */ +typedef struct { + unsigned char array_desc_dtype; + char array_desc_scale; + unsigned short array_desc_length; + char array_desc_field_name [32]; + char array_desc_relation_name [32]; + short array_desc_dimensions; + short array_desc_flags; + ISC_ARRAY_BOUND array_desc_bounds [16]; +} ISC_ARRAY_DESC; -/* This enum applies to parameter "mode" in blob_lseek */ -enum blob_lseek_mode {blb_seek_relative = 1, blb_seek_from_tail = 2}; -/* This enum applies to the value returned by blob_get_segment */ -enum blob_get_result {blb_got_fragment = -1, blb_got_eof = 0, blb_got_full_segment = 1}; +typedef struct { + short blob_desc_subtype; + short blob_desc_charset; + short blob_desc_segment_size; + unsigned char blob_desc_field_name [32]; + unsigned char blob_desc_relation_name [32]; +} ISC_BLOB_DESC; -typedef struct blobcallback { - short (*blob_get_segment) - (void* hnd, ISC_UCHAR* buffer, ISC_USHORT buf_size, ISC_USHORT* result_len); - void* blob_handle; - ISC_LONG blob_number_segments; - ISC_LONG blob_max_segment; - ISC_LONG blob_total_length; - void (*blob_put_segment) - (void* hnd, const ISC_UCHAR* buffer, ISC_USHORT buf_size); - ISC_LONG (*blob_lseek) - (void* hnd, ISC_USHORT mode, ISC_LONG offset); -} *BLOBCALLBACK; -#endif /* !defined(JRD_VAL_H) && !defined(REQUESTER) */ - - -/********************************************************************/ -/* CVC: Public descriptor interface held in dsc2.h. */ -/* We need it documented to be able to recognize NULL in UDFs. */ -/* Being its original name "dsc", I renamed it paramdsc here. */ -/* Notice that I adjust to the original definition: contrary to */ -/* other cases, the typedef is the same struct not the pointer. */ -/* I included the enumeration of dsc_dtype possible values. */ -/* Ultimately, dsc2.h should be part of the public interface. */ -/********************************************************************/ - -#if !defined(JRD_DSC_H) -/* This is the famous internal descriptor that UDFs can use, too. */ -typedef struct paramdsc { - ISC_UCHAR dsc_dtype; - signed char dsc_scale; - ISC_USHORT dsc_length; - short dsc_sub_type; - ISC_USHORT dsc_flags; - ISC_UCHAR *dsc_address; -} PARAMDSC; - -#if !defined(JRD_VAL_H) -/* This is a helper struct to work with varchars. */ -typedef struct paramvary { - ISC_USHORT vary_length; - ISC_UCHAR vary_string[1]; -} PARAMVARY; -#endif /* !defined(JRD_VAL_H) */ - - -#ifndef JRD_DSC_PUB_H -#define JRD_DSC_PUB_H - -#define DSC_null 1 -#define DSC_no_subtype 2 -#define DSC_nullable 4 - -#define dtype_unknown 0 -#define dtype_text 1 -#define dtype_cstring 2 -#define dtype_varying 3 - -#define dtype_packed 6 -#define dtype_byte 7 -#define dtype_short 8 -#define dtype_long 9 -#define dtype_quad 10 -#define dtype_real 11 -#define dtype_double 12 -#define dtype_d_float 13 -#define dtype_sql_date 14 -#define dtype_sql_time 15 -#define dtype_timestamp 16 -#define dtype_blob 17 -#define dtype_array 18 -#define dtype_int64 19 -#define DTYPE_TYPE_MAX 20 - -#define ISC_TIME_SECONDS_PRECISION 10000 -#define ISC_TIME_SECONDS_PRECISION_SCALE (-4) - -#endif - - -#endif /* !defined(JRD_DSC_H) */ +/***********************************************/ /***************************/ /* Dynamic SQL definitions */ /***************************/ + +/******************************/ +/* Declare the extended SQLDA */ +/******************************/ - -#ifndef DSQL_SQLDA_PUB_H -#define DSQL_SQLDA_PUB_H - -#define DSQL_close 1 -#define DSQL_drop 2 - -typedef struct -{ - ISC_SHORT sqltype; - ISC_SHORT sqlscale; - ISC_SHORT sqlsubtype; - ISC_SHORT sqllen; - ISC_SCHAR* sqldata; - ISC_SHORT* sqlind; - ISC_SHORT sqlname_length; - ISC_SCHAR sqlname[32]; - ISC_SHORT relname_length; - ISC_SCHAR relname[32]; - ISC_SHORT ownname_length; - ISC_SCHAR ownname[32]; - ISC_SHORT aliasname_length; - ISC_SCHAR aliasname[32]; +typedef struct { + short sqltype; /* datatype of field */ + short sqlscale; /* scale factor */ + short sqlprecision; /* precision : Reserved for future */ + short sqlsubtype; /* datatype subtype */ + short sqllen; /* length of data area */ + char ISC_FAR *sqldata; /* address of data */ + short ISC_FAR *sqlind; /* address of indicator variable */ + short sqlname_length; /* length of sqlname field */ + char sqlname [METADATALENGTH]; /* name of field, name length + space */ + /* for NULL */ + short relname_length; /* length of relation name */ + char relname [METADATALENGTH]; /* field's relation name + space for */ + /* NULL */ + short ownname_length; /* length of owner name */ + char ownname [METADATALENGTH]; /* relation's owner name + space for */ + /* NULL */ + short aliasname_length; /* length of alias name */ + char aliasname [METADATALENGTH]; /* relation's alias name + space for */ + /* NULL */ } XSQLVAR; -#define SQLDA_VERSION1 1 - -typedef struct -{ - ISC_SHORT version; - ISC_SCHAR sqldaid[8]; - ISC_LONG sqldabc; - ISC_SHORT sqln; - ISC_SHORT sqld; - XSQLVAR sqlvar[1]; +typedef struct { + short version; /* version of this XSQLDA */ + char sqldaid [8]; /* XSQLDA name field */ + ISC_LONG sqldabc; /* length in bytes of SQLDA */ + short sqln; /* number of fields allocated */ + short sqld; /* actual number of fields */ + XSQLVAR sqlvar[1]; /* first field address */ } XSQLDA; -#define XSQLDA_LENGTH(n) (sizeof (XSQLDA) + (n - 1) * sizeof (XSQLVAR)) -#define SQL_TEXT 452 -#define SQL_VARYING 448 -#define SQL_SHORT 500 -#define SQL_LONG 496 -#define SQL_FLOAT 482 -#define SQL_DOUBLE 480 -#define SQL_D_FLOAT 530 -#define SQL_TIMESTAMP 510 -#define SQL_BLOB 520 -#define SQL_ARRAY 540 -#define SQL_QUAD 550 -#define SQL_TYPE_TIME 560 -#define SQL_TYPE_DATE 570 -#define SQL_INT64 580 +#define SQLDA_VERSION2 2 +#define SQLDA_CURRENT_VERSION SQLDA_VERSION2 -#define SQL_DATE SQL_TIMESTAMP +#define XSQLDA_LENGTH(n) (sizeof (XSQLDA) + (n-1) * sizeof (XSQLVAR)) +#define XSQLVAR_LENGTH(num_rows, num_vars) (sizeof(XSQLVAR) * num_rows * num_vars) +/* START CONVERT TAG */ +#define SQL_DIALECT_V5 1 /* meaning is same as DIALECT_xsqlda */ +#define SQL_DIALECT_V6_TRANSITION 2 /* flagging anything that is delimited + by double quotes as an error and + flagging keyword DATE as an error */ +#define SQL_DIALECT_V6 3 /* supports SQL delimited identifier, + SQLDATE/DATE, TIME, TIMESTAMP, + CURRENT_DATE, CURRENT_TIME, + CURRENT_TIMESTAMP, and 64-bit exact + numeric type */ +#define SQL_DIALECT_CURRENT SQL_DIALECT_V6 /* latest IB DIALECT */ +/* END CONVERT TAG */ -#define SQL_DIALECT_V5 1 -#define SQL_DIALECT_V6_TRANSITION 2 -#define SQL_DIALECT_V6 3 -#define SQL_DIALECT_CURRENT SQL_DIALECT_V6 +/* START CONVERT TAG */ +/* Bit flag definitions for SQLVAR.sqlind output variable */ -#endif +#define SQLIND_NULL (short) (1 << 15) +#define SQLIND_INSERT (1 << 0) +#define SQLIND_UPDATE (1 << 1) +#define SQLIND_DELETE (1 << 2) +#define SQLIND_CHANGE (1 << 3) +#define SQLIND_TRUNCATE (1 << 4) +#define SQLIND_CHANGE_VIEW (1 << 5) +/* END CONVERT TAG */ + +/********************************/ +/* InterBase Handle Definitions */ +/********************************/ +typedef void ISC_FAR *isc_att_handle; +typedef void ISC_FAR *isc_blob_handle; +typedef void ISC_FAR *isc_db_handle; +typedef void ISC_FAR *isc_form_handle; +typedef void ISC_FAR *isc_req_handle; +typedef void ISC_FAR *isc_stmt_handle; +typedef void ISC_FAR *isc_svc_handle; +typedef void ISC_FAR *isc_tr_handle; +typedef void ISC_FAR *isc_win_handle; +typedef void (ISC_FAR *isc_callback)(); +typedef ISC_LONG isc_resv_handle; + /***************************/ /* OSRI database functions */ /***************************/ +#if defined(__cplusplus) || defined(__STDC__) || defined(_Windows) || \ + (defined(_MSC_VER) && defined(_WIN32)) || defined( _WINDOWS) || \ + (defined(__BORLANDC__) && (defined(__WIN32__) || defined(__OS2__))) || \ + (defined(_WIN64)) || \ + (defined(__IBMC__) && defined(__OS2__)) || defined(AIX_PPC) + #ifdef __cplusplus extern "C" { #endif -ISC_STATUS ISC_EXPORT isc_attach_database(ISC_STATUS*, - short, - const ISC_SCHAR*, - isc_db_handle*, - short, - const ISC_SCHAR*); - -ISC_STATUS ISC_EXPORT isc_array_gen_sdl(ISC_STATUS*, - const ISC_ARRAY_DESC*, - ISC_SHORT*, - ISC_UCHAR*, - ISC_SHORT*); - -ISC_STATUS ISC_EXPORT isc_array_get_slice(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - ISC_QUAD*, - const ISC_ARRAY_DESC*, - void*, - ISC_LONG*); - -ISC_STATUS ISC_EXPORT isc_array_lookup_bounds(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - const ISC_SCHAR*, - const ISC_SCHAR*, - ISC_ARRAY_DESC*); - -ISC_STATUS ISC_EXPORT isc_array_lookup_desc(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - const ISC_SCHAR*, - const ISC_SCHAR*, - ISC_ARRAY_DESC*); - -ISC_STATUS ISC_EXPORT isc_array_set_desc(ISC_STATUS*, - const ISC_SCHAR*, - const ISC_SCHAR*, - const short*, - const short*, - const short*, - ISC_ARRAY_DESC*); - -ISC_STATUS ISC_EXPORT isc_array_put_slice(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - ISC_QUAD*, - const ISC_ARRAY_DESC*, - void*, - ISC_LONG *); - -void ISC_EXPORT isc_blob_default_desc(ISC_BLOB_DESC*, - const ISC_UCHAR*, - const ISC_UCHAR*); - -ISC_STATUS ISC_EXPORT isc_blob_gen_bpb(ISC_STATUS*, - const ISC_BLOB_DESC*, - const ISC_BLOB_DESC*, - unsigned short, - ISC_UCHAR*, - unsigned short*); - -ISC_STATUS ISC_EXPORT isc_blob_info(ISC_STATUS*, - isc_blob_handle*, - short, - const ISC_SCHAR*, - short, - ISC_SCHAR*); - -ISC_STATUS ISC_EXPORT isc_blob_lookup_desc(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - const ISC_UCHAR*, - const ISC_UCHAR*, - ISC_BLOB_DESC*, - ISC_UCHAR*); - -ISC_STATUS ISC_EXPORT isc_blob_set_desc(ISC_STATUS*, - const ISC_UCHAR*, - const ISC_UCHAR*, - short, - short, - short, - ISC_BLOB_DESC*); - -ISC_STATUS ISC_EXPORT isc_cancel_blob(ISC_STATUS *, - isc_blob_handle *); - -ISC_STATUS ISC_EXPORT isc_cancel_events(ISC_STATUS *, - isc_db_handle *, - ISC_LONG *); - -ISC_STATUS ISC_EXPORT isc_close_blob(ISC_STATUS *, - isc_blob_handle *); - -ISC_STATUS ISC_EXPORT isc_commit_retaining(ISC_STATUS *, - isc_tr_handle *); - -ISC_STATUS ISC_EXPORT isc_commit_transaction(ISC_STATUS *, - isc_tr_handle *); - -ISC_STATUS ISC_EXPORT isc_create_blob(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - isc_blob_handle*, - ISC_QUAD*); - -ISC_STATUS ISC_EXPORT isc_create_blob2(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - isc_blob_handle*, - ISC_QUAD*, - short, - const ISC_SCHAR*); - -ISC_STATUS ISC_EXPORT isc_create_database(ISC_STATUS*, - short, - const ISC_SCHAR*, - isc_db_handle*, - short, - const ISC_SCHAR*, - short); - -ISC_STATUS ISC_EXPORT isc_database_info(ISC_STATUS*, - isc_db_handle*, - short, - const ISC_SCHAR*, - short, - ISC_SCHAR*); - -void ISC_EXPORT isc_decode_date(const ISC_QUAD*, - void*); - -void ISC_EXPORT isc_decode_sql_date(const ISC_DATE*, - void*); - -void ISC_EXPORT isc_decode_sql_time(const ISC_TIME*, - void*); - -void ISC_EXPORT isc_decode_timestamp(const ISC_TIMESTAMP*, - void*); - -ISC_STATUS ISC_EXPORT isc_detach_database(ISC_STATUS *, - isc_db_handle *); - -ISC_STATUS ISC_EXPORT isc_drop_database(ISC_STATUS *, - isc_db_handle *); - -ISC_STATUS ISC_EXPORT isc_dsql_allocate_statement(ISC_STATUS *, - isc_db_handle *, - isc_stmt_handle *); - -ISC_STATUS ISC_EXPORT isc_dsql_alloc_statement2(ISC_STATUS *, - isc_db_handle *, - isc_stmt_handle *); - -ISC_STATUS ISC_EXPORT isc_dsql_describe(ISC_STATUS *, - isc_stmt_handle *, - unsigned short, - XSQLDA *); - -ISC_STATUS ISC_EXPORT isc_dsql_describe_bind(ISC_STATUS *, - isc_stmt_handle *, - unsigned short, - XSQLDA *); - -ISC_STATUS ISC_EXPORT isc_dsql_exec_immed2(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - XSQLDA*, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_dsql_execute(ISC_STATUS*, - isc_tr_handle*, - isc_stmt_handle*, - unsigned short, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_dsql_execute2(ISC_STATUS*, - isc_tr_handle*, - isc_stmt_handle*, - unsigned short, - XSQLDA*, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_dsql_execute_immediate(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_dsql_fetch(ISC_STATUS *, - isc_stmt_handle *, - unsigned short, - XSQLDA *); - -ISC_STATUS ISC_EXPORT isc_dsql_finish(isc_db_handle *); - -ISC_STATUS ISC_EXPORT isc_dsql_free_statement(ISC_STATUS *, - isc_stmt_handle *, - unsigned short); - -ISC_STATUS ISC_EXPORT isc_dsql_insert(ISC_STATUS*, - isc_stmt_handle*, - unsigned short, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_dsql_prepare(ISC_STATUS*, - isc_tr_handle*, - isc_stmt_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_dsql_set_cursor_name(ISC_STATUS*, - isc_stmt_handle*, - const ISC_SCHAR*, - unsigned short); - -ISC_STATUS ISC_EXPORT isc_dsql_sql_info(ISC_STATUS*, - isc_stmt_handle*, - short, - const ISC_SCHAR*, - short, - ISC_SCHAR*); - -void ISC_EXPORT isc_encode_date(const void*, - ISC_QUAD*); - -void ISC_EXPORT isc_encode_sql_date(const void*, - ISC_DATE*); - -void ISC_EXPORT isc_encode_sql_time(const void*, - ISC_TIME*); - -void ISC_EXPORT isc_encode_timestamp(const void*, - ISC_TIMESTAMP*); - -ISC_LONG ISC_EXPORT_VARARG isc_event_block(ISC_UCHAR**, - ISC_UCHAR**, - ISC_USHORT, ...); - -ISC_USHORT ISC_EXPORT isc_event_block_a(ISC_SCHAR**, - ISC_SCHAR**, - ISC_USHORT, - ISC_SCHAR**); - -void ISC_EXPORT isc_event_block_s(ISC_SCHAR**, - ISC_SCHAR**, - ISC_USHORT, - ISC_SCHAR**, - ISC_USHORT*); - -void ISC_EXPORT isc_event_counts(ISC_ULONG*, - short, - ISC_UCHAR*, - const ISC_UCHAR *); - -/* 17 May 2001 - isc_expand_dpb is DEPRECATED */ -void FB_API_DEPRECATED ISC_EXPORT_VARARG isc_expand_dpb(ISC_SCHAR**, - short*, ...); - -int ISC_EXPORT isc_modify_dpb(ISC_SCHAR**, - short*, - unsigned short, - const ISC_SCHAR*, - short); - -ISC_LONG ISC_EXPORT isc_free(ISC_SCHAR *); - -ISC_STATUS ISC_EXPORT isc_get_segment(ISC_STATUS *, - isc_blob_handle *, - unsigned short *, - unsigned short, - ISC_SCHAR *); - -ISC_STATUS ISC_EXPORT isc_get_slice(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - ISC_QUAD*, - short, - const ISC_SCHAR*, - short, - const ISC_LONG*, - ISC_LONG, - void*, - ISC_LONG*); - -/* CVC: This non-const signature is needed for compatibility, see gds.cpp. */ -ISC_LONG FB_API_DEPRECATED ISC_EXPORT isc_interprete(ISC_SCHAR*, - ISC_STATUS**); - -/* This const params version used in the engine and other places. */ -ISC_LONG ISC_EXPORT fb_interpret(ISC_SCHAR*, - unsigned int, - const ISC_STATUS**); - -ISC_STATUS ISC_EXPORT isc_open_blob(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - isc_blob_handle*, - ISC_QUAD*); - -ISC_STATUS ISC_EXPORT isc_open_blob2(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - isc_blob_handle*, - ISC_QUAD*, - ISC_USHORT, - const ISC_UCHAR*); - -ISC_STATUS ISC_EXPORT isc_prepare_transaction2(ISC_STATUS*, - isc_tr_handle*, - ISC_USHORT, - const ISC_UCHAR*); - -void ISC_EXPORT isc_print_sqlerror(ISC_SHORT, - const ISC_STATUS*); - -ISC_STATUS ISC_EXPORT isc_print_status(const ISC_STATUS*); - -ISC_STATUS ISC_EXPORT isc_put_segment(ISC_STATUS*, - isc_blob_handle*, - unsigned short, - const ISC_SCHAR*); - -ISC_STATUS ISC_EXPORT isc_put_slice(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - ISC_QUAD*, - short, - const ISC_SCHAR*, - short, - const ISC_LONG*, - ISC_LONG, - void*); - -ISC_STATUS ISC_EXPORT isc_que_events(ISC_STATUS*, - isc_db_handle*, - ISC_LONG*, - short, - const ISC_UCHAR*, - ISC_EVENT_CALLBACK, - void*); - -ISC_STATUS ISC_EXPORT isc_rollback_retaining(ISC_STATUS *, - isc_tr_handle *); - -ISC_STATUS ISC_EXPORT isc_rollback_transaction(ISC_STATUS *, - isc_tr_handle *); - -ISC_STATUS ISC_EXPORT isc_start_multiple(ISC_STATUS *, - isc_tr_handle *, - short, - void *); - -ISC_STATUS ISC_EXPORT_VARARG isc_start_transaction(ISC_STATUS *, - isc_tr_handle *, - short, ...); - -ISC_LONG ISC_EXPORT isc_sqlcode(const ISC_STATUS*); - -void ISC_EXPORT isc_sqlcode_s(const ISC_STATUS*, - ISC_ULONG*); - -void ISC_EXPORT isc_sql_interprete(short, - ISC_SCHAR*, - short); - -ISC_STATUS ISC_EXPORT isc_transaction_info(ISC_STATUS*, - isc_tr_handle*, - short, - const ISC_SCHAR*, - short, - ISC_SCHAR*); - -ISC_STATUS ISC_EXPORT isc_transact_request(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - ISC_SCHAR*, - unsigned short, - ISC_SCHAR*); - -ISC_LONG ISC_EXPORT isc_vax_integer(const ISC_SCHAR*, - short); - -ISC_INT64 ISC_EXPORT isc_portable_integer(const ISC_UCHAR*, - short); +ISC_STATUS ISC_EXPORT isc_attach_database (ISC_STATUS ISC_FAR *, + short, + char ISC_FAR *, + isc_db_handle ISC_FAR *, + short, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_gen_sdl (ISC_STATUS ISC_FAR *, + ISC_ARRAY_DESC ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *, + short ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_gen_sdl2 (ISC_STATUS ISC_FAR *, + ISC_ARRAY_DESC_V2 ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *, + short ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_get_slice (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + ISC_QUAD ISC_FAR *, + ISC_ARRAY_DESC ISC_FAR *, + void ISC_FAR *, + ISC_LONG ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_get_slice2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + ISC_QUAD ISC_FAR *, + ISC_ARRAY_DESC_V2 ISC_FAR *, + void ISC_FAR *, + ISC_LONG ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_lookup_bounds (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + char ISC_FAR *, + ISC_ARRAY_DESC ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_lookup_bounds2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + char ISC_FAR *, + ISC_ARRAY_DESC_V2 ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_lookup_desc (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + char ISC_FAR *, + ISC_ARRAY_DESC ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_lookup_desc2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + char ISC_FAR *, + ISC_ARRAY_DESC_V2 ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_set_desc (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + char ISC_FAR *, + short ISC_FAR *, + short ISC_FAR *, + short ISC_FAR *, + ISC_ARRAY_DESC ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_set_desc2 (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + char ISC_FAR *, + short ISC_FAR *, + short ISC_FAR *, + short ISC_FAR *, + ISC_ARRAY_DESC_V2 ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_put_slice (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + ISC_QUAD ISC_FAR *, + ISC_ARRAY_DESC ISC_FAR *, + void ISC_FAR *, + ISC_LONG ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_array_put_slice2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + ISC_QUAD ISC_FAR *, + ISC_ARRAY_DESC_V2 ISC_FAR *, + void ISC_FAR *, + ISC_LONG ISC_FAR *); + +void ISC_EXPORT isc_blob_default_desc (ISC_BLOB_DESC ISC_FAR *, + unsigned char ISC_FAR *, + unsigned char ISC_FAR *); + +void ISC_EXPORT isc_blob_default_desc2 (ISC_BLOB_DESC_V2 ISC_FAR *, + unsigned char ISC_FAR *, + unsigned char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_blob_gen_bpb (ISC_STATUS ISC_FAR *, + ISC_BLOB_DESC ISC_FAR *, + ISC_BLOB_DESC ISC_FAR *, + unsigned short, + unsigned char ISC_FAR *, + unsigned short ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_blob_gen_bpb2 (ISC_STATUS ISC_FAR *, + ISC_BLOB_DESC_V2 ISC_FAR *, + ISC_BLOB_DESC_V2 ISC_FAR *, + unsigned short, + unsigned char ISC_FAR *, + unsigned short ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_blob_info (ISC_STATUS ISC_FAR *, + isc_blob_handle ISC_FAR *, + short, + char ISC_FAR *, + short, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_blob_lookup_desc (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned char ISC_FAR *, + unsigned char ISC_FAR *, + ISC_BLOB_DESC ISC_FAR *, + unsigned char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_blob_lookup_desc2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned char ISC_FAR *, + unsigned char ISC_FAR *, + ISC_BLOB_DESC_V2 ISC_FAR *, + unsigned char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_blob_set_desc (ISC_STATUS ISC_FAR *, + unsigned char ISC_FAR *, + unsigned char ISC_FAR *, + short, + short, + short, + ISC_BLOB_DESC ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_blob_set_desc2 (ISC_STATUS ISC_FAR *, + unsigned char ISC_FAR *, + unsigned char ISC_FAR *, + short, + short, + short, + ISC_BLOB_DESC_V2 ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_cancel_blob (ISC_STATUS ISC_FAR *, + isc_blob_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_cancel_events (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + ISC_LONG ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_close_blob (ISC_STATUS ISC_FAR *, + isc_blob_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_commit_retaining (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_commit_transaction (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_create_blob (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_blob_handle ISC_FAR *, + ISC_QUAD ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_create_blob2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_blob_handle ISC_FAR *, + ISC_QUAD ISC_FAR *, + short, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_create_database (ISC_STATUS ISC_FAR *, + short, + char ISC_FAR *, + isc_db_handle ISC_FAR *, + short, + char ISC_FAR *, + short); + +ISC_STATUS ISC_EXPORT isc_database_info (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + short, + char ISC_FAR *, + short, + char ISC_FAR *); + +void ISC_EXPORT isc_decode_date (ISC_QUAD ISC_FAR *, + void ISC_FAR *); + +void ISC_EXPORT isc_decode_sql_date (ISC_DATE ISC_FAR *, + void ISC_FAR *); + +void ISC_EXPORT isc_decode_sql_time (ISC_TIME ISC_FAR *, + void ISC_FAR *); + +void ISC_EXPORT isc_decode_timestamp (ISC_TIMESTAMP ISC_FAR *, + void ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_detach_database (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_drop_database (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_allocate_statement (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_alloc_statement2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_describe (ISC_STATUS ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_describe_bind (ISC_STATUS ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_exec_immed2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *, + XSQLDA ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_execute (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_execute2 (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *, + XSQLDA ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_batch_execute_immed (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + int, + ISC_ULONG, + char ISC_FAR **, + ISC_ULONG ISC_FAR *); +ISC_STATUS ISC_EXPORT isc_dsql_batch_exec_immed3_m (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned short, + ISC_ULONG, + unsigned char ISC_FAR *, + unsigned short, + ISC_ULONG ISC_FAR * + ); +ISC_STATUS ISC_EXPORT isc_dsql_batch_execute (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *, + unsigned short, + XSQLVAR ISC_FAR *, + ISC_ULONG ISC_FAR *); +ISC_STATUS ISC_EXPORT isc_dsql_execute_immediate (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_fetch (ISC_STATUS ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_finish (isc_db_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_free_statement (ISC_STATUS ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short); + +ISC_STATUS ISC_EXPORT isc_dsql_insert (ISC_STATUS ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_prepare (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_dsql_set_cursor_name (ISC_STATUS ISC_FAR *, + isc_stmt_handle ISC_FAR *, + char ISC_FAR *, + unsigned short); + +ISC_STATUS ISC_EXPORT isc_dsql_sql_info (ISC_STATUS ISC_FAR *, + isc_stmt_handle ISC_FAR *, + short, + char ISC_FAR *, + short, + char ISC_FAR *); + +void ISC_EXPORT isc_encode_date (void ISC_FAR *, + ISC_QUAD ISC_FAR *); + +void ISC_EXPORT isc_encode_sql_date (void ISC_FAR *, + ISC_DATE ISC_FAR *); + +void ISC_EXPORT isc_encode_sql_time (void ISC_FAR *, + ISC_TIME ISC_FAR *); + +void ISC_EXPORT isc_encode_timestamp (void ISC_FAR *, + ISC_TIMESTAMP ISC_FAR *); + +ISC_LONG ISC_EXPORT_VARARG isc_event_block (char ISC_FAR * ISC_FAR *, + char ISC_FAR * ISC_FAR *, + unsigned short, ...); + +ISC_USHORT ISC_EXPORT isc_event_block_a (char ISC_FAR * ISC_FAR *, + char ISC_FAR * ISC_FAR *, + unsigned short, + char ISC_FAR * ISC_FAR *); + +void ISC_EXPORT isc_event_counts (ISC_ULONG ISC_FAR *, + short, + char ISC_FAR *, + char ISC_FAR *); + +void ISC_EXPORT_VARARG isc_expand_dpb (char ISC_FAR * ISC_FAR *, + short ISC_FAR *, + ...); + +int ISC_EXPORT isc_modify_dpb (char ISC_FAR * ISC_FAR *, + short ISC_FAR *, unsigned short, + char ISC_FAR *, short ); + +ISC_LONG ISC_EXPORT isc_free (char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_get_segment (ISC_STATUS ISC_FAR *, + isc_blob_handle ISC_FAR *, + unsigned short ISC_FAR *, + unsigned short, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_get_slice (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + ISC_QUAD ISC_FAR *, + short, + char ISC_FAR *, + short, + ISC_LONG ISC_FAR *, + ISC_LONG, + void ISC_FAR *, + ISC_LONG ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_interprete (char ISC_FAR *, + ISC_STATUS ISC_FAR * ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_open_blob (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_blob_handle ISC_FAR *, + ISC_QUAD ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_open_blob2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_blob_handle ISC_FAR *, + ISC_QUAD ISC_FAR *, + short, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_prepare_transaction2 (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + short, + char ISC_FAR *); + +void ISC_EXPORT isc_print_sqlerror (short, + ISC_STATUS ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_print_status (ISC_STATUS ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_put_segment (ISC_STATUS ISC_FAR *, + isc_blob_handle ISC_FAR *, + unsigned short, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_put_slice (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + ISC_QUAD ISC_FAR *, + short, + char ISC_FAR *, + short, + ISC_LONG ISC_FAR *, + ISC_LONG, + void ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_que_events (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + ISC_LONG ISC_FAR *, + short, + char ISC_FAR *, + isc_callback, + void ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_release_savepoint (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_rollback_retaining (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_rollback_savepoint (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + unsigned short); + +ISC_STATUS ISC_EXPORT isc_rollback_transaction (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_start_multiple (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + short, + void ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_start_savepoint (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT_VARARG isc_start_transaction (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + short, ...); + +ISC_LONG ISC_EXPORT isc_sqlcode (ISC_STATUS ISC_FAR *); + +void ISC_EXPORT isc_sql_interprete (short, + char ISC_FAR *, + short); + +ISC_STATUS ISC_EXPORT isc_transaction_info (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + short, + char ISC_FAR *, + short, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_transact_request (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + char ISC_FAR *); + +ISC_LONG ISC_EXPORT isc_vax_integer (char ISC_FAR *, + short); + +ISC_INT64 ISC_EXPORT isc_portable_integer (unsigned char ISC_FAR *, + short); /*************************************/ /* Security Functions and structures */ /*************************************/ - #define sec_uid_spec 0x01 #define sec_gid_spec 0x02 #define sec_server_spec 0x04 @@ -838,487 +928,694 @@ ISC_INT64 ISC_EXPORT isc_portable_integer(const ISC_UCHAR*, #define sec_protocol_tcpip 1 #define sec_protocol_netbeui 2 -#define sec_protocol_spx 3 /* -- Deprecated Protocol. Declaration retained for compatibility */ +#define sec_protocol_spx 3 #define sec_protocol_local 4 typedef struct { - short sec_flags; /* which fields are specified */ - int uid; /* the user's id */ - int gid; /* the user's group id */ - int protocol; /* protocol to use for connection */ - ISC_SCHAR *server; /* server to administer */ - ISC_SCHAR *user_name; /* the user's name */ - ISC_SCHAR *password; /* the user's password */ - ISC_SCHAR *group_name; /* the group name */ - ISC_SCHAR *first_name; /* the user's first name */ - ISC_SCHAR *middle_name; /* the user's middle name */ - ISC_SCHAR *last_name; /* the user's last name */ - ISC_SCHAR *dba_user_name; /* the dba user name */ - ISC_SCHAR *dba_password; /* the dba password */ + short sec_flags; /* which fields are specified */ + int uid; /* the user's id */ + int gid; /* the user's group id */ + int protocol; /* protocol to use for connection */ + char ISC_FAR *server; /* server to administer */ + char ISC_FAR *user_name; /* the user's name */ + char ISC_FAR *password; /* the user's password */ + char ISC_FAR *group_name; /* the group name */ + char ISC_FAR *first_name; /* the user's first name */ + char ISC_FAR *middle_name; /* the user's middle name */ + char ISC_FAR *last_name; /* the user's last name */ + char ISC_FAR *dba_user_name; /* the dba user name */ + char ISC_FAR *dba_password; /* the dba password */ } USER_SEC_DATA; -ISC_STATUS ISC_EXPORT isc_add_user(ISC_STATUS*, const USER_SEC_DATA*); +int ISC_EXPORT isc_add_user (ISC_STATUS ISC_FAR *, USER_SEC_DATA *); -ISC_STATUS ISC_EXPORT isc_delete_user(ISC_STATUS*, const USER_SEC_DATA*); +int ISC_EXPORT isc_delete_user (ISC_STATUS ISC_FAR *, USER_SEC_DATA *); -ISC_STATUS ISC_EXPORT isc_modify_user(ISC_STATUS*, const USER_SEC_DATA*); +int ISC_EXPORT isc_modify_user (ISC_STATUS ISC_FAR *, USER_SEC_DATA *); /**********************************/ /* Other OSRI functions */ /**********************************/ + +ISC_STATUS ISC_EXPORT isc_compile_request (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_compile_request(ISC_STATUS*, - isc_db_handle*, - isc_req_handle*, - short, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_compile_request2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_compile_request2(ISC_STATUS*, - isc_db_handle*, - isc_req_handle*, - short, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_ddl (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_ddl(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - short, - const ISC_SCHAR*); - -ISC_STATUS ISC_EXPORT isc_prepare_transaction(ISC_STATUS*, - isc_tr_handle*); +ISC_STATUS ISC_EXPORT isc_prepare_transaction (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_receive(ISC_STATUS*, - isc_req_handle*, - short, - short, - void*, - short); +ISC_STATUS ISC_EXPORT isc_receive (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *, + short, + short, + void ISC_FAR *, + short); -ISC_STATUS ISC_EXPORT isc_reconnect_transaction(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - short, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_reconnect_transaction (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_release_request(ISC_STATUS*, - isc_req_handle*); +ISC_STATUS ISC_EXPORT isc_release_request (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_request_info(ISC_STATUS*, - isc_req_handle*, - short, - short, - const ISC_SCHAR*, - short, - ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_request_info (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *, + short, + short, + char ISC_FAR *, + short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_seek_blob(ISC_STATUS*, - isc_blob_handle*, - short, - ISC_LONG, - ISC_LONG*); +ISC_STATUS ISC_EXPORT isc_seek_blob (ISC_STATUS ISC_FAR *, + isc_blob_handle ISC_FAR *, + short, + ISC_LONG, + ISC_LONG ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_send(ISC_STATUS*, - isc_req_handle*, - short, - short, - const void*, - short); +ISC_STATUS ISC_EXPORT isc_send (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *, + short, + short, + void ISC_FAR *, + short); -ISC_STATUS ISC_EXPORT isc_start_and_send(ISC_STATUS*, - isc_req_handle*, - isc_tr_handle*, - short, - short, - const void*, - short); +ISC_STATUS ISC_EXPORT isc_start_and_send (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + short, + short, + void ISC_FAR *, + short); -ISC_STATUS ISC_EXPORT isc_start_request(ISC_STATUS *, - isc_req_handle *, - isc_tr_handle *, - short); - -ISC_STATUS ISC_EXPORT isc_unwind_request(ISC_STATUS *, - isc_tr_handle *, - short); - -ISC_STATUS ISC_EXPORT isc_wait_for_event(ISC_STATUS*, - isc_db_handle*, - short, - const ISC_UCHAR*, - ISC_UCHAR*); +ISC_STATUS ISC_EXPORT isc_start_request (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + short); +ISC_STATUS ISC_EXPORT isc_unwind_request (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + short); +ISC_STATUS ISC_EXPORT isc_wait_for_event (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + short, + char ISC_FAR *, + char ISC_FAR *); + /*****************************/ /* Other Sql functions */ /*****************************/ -ISC_STATUS ISC_EXPORT isc_close(ISC_STATUS*, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_close (ISC_STATUS ISC_FAR *, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_declare(ISC_STATUS*, - const ISC_SCHAR*, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_declare (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_describe(ISC_STATUS*, - const ISC_SCHAR*, - XSQLDA *); +ISC_STATUS ISC_EXPORT isc_describe (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_describe_bind(ISC_STATUS*, - const ISC_SCHAR*, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_describe_bind (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_execute(ISC_STATUS*, - isc_tr_handle*, - const ISC_SCHAR*, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_execute (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_execute_immediate(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - short*, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_execute_immediate (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_fetch(ISC_STATUS*, - const ISC_SCHAR*, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_open(ISC_STATUS*, - isc_tr_handle*, - const ISC_SCHAR*, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_prepare(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - const ISC_SCHAR*, - short*, - const ISC_SCHAR*, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_fetch (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + XSQLDA ISC_FAR *); +ISC_STATUS ISC_EXPORT isc_open (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + XSQLDA ISC_FAR *); +ISC_STATUS ISC_EXPORT isc_prepare (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *, + XSQLDA ISC_FAR *); + /*************************************/ /* Other Dynamic sql functions */ /*************************************/ -ISC_STATUS ISC_EXPORT isc_dsql_execute_m(ISC_STATUS*, - isc_tr_handle*, - isc_stmt_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - unsigned short, - ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_dsql_execute_m (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_dsql_execute2_m(ISC_STATUS*, - isc_tr_handle*, - isc_stmt_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - unsigned short, - const ISC_SCHAR*, - unsigned short, - ISC_SCHAR*, - unsigned short, - unsigned short, - ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_dsql_execute2_m (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_dsql_execute_immediate_m(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - unsigned short, - const ISC_SCHAR*, - unsigned short, - unsigned short, - ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_dsql_batch_execute2_m (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *, + unsigned short, + ISC_ULONG ISC_FAR *); +ISC_STATUS ISC_EXPORT isc_dsql_execute_immediate_m (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_dsql_exec_immed3_m(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - unsigned short, - const ISC_SCHAR*, - unsigned short, - unsigned short, - ISC_SCHAR*, - unsigned short, - ISC_SCHAR*, - unsigned short, - unsigned short, - ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_dsql_exec_immed3_m (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_dsql_fetch_m(ISC_STATUS*, - isc_stmt_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - unsigned short, - ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_dsql_fetch_m (ISC_STATUS ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_dsql_insert_m(ISC_STATUS*, - isc_stmt_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - unsigned short, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_dsql_insert_m (ISC_STATUS ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_dsql_prepare_m(ISC_STATUS*, - isc_tr_handle*, - isc_stmt_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - unsigned short, - const ISC_SCHAR*, - unsigned short, - ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_dsql_prepare_m (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_stmt_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + unsigned short, + char ISC_FAR *, + unsigned short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_dsql_release(ISC_STATUS*, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_dsql_release (ISC_STATUS ISC_FAR *, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_close(ISC_STATUS*, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_close (ISC_STATUS ISC_FAR *, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_declare(ISC_STATUS*, - const ISC_SCHAR*, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_declare (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_describe(ISC_STATUS*, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_describe (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_describe_bind(ISC_STATUS*, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_describe_bind (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_execute(ISC_STATUS*, - isc_tr_handle*, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_execute (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_execute2(ISC_STATUS*, - isc_tr_handle*, - const ISC_SCHAR*, - unsigned short, - XSQLDA*, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_execute2 (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_execute_immed(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_execute_immed (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_fetch(ISC_STATUS*, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_exec_immed2 (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_fetch_a(ISC_STATUS*, - int*, - const ISC_SCHAR*, - ISC_USHORT, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_fetch (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); -void ISC_EXPORT isc_embed_dsql_length(const ISC_UCHAR*, - ISC_USHORT*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_open (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_open(ISC_STATUS*, - isc_tr_handle*, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_open2 (ISC_STATUS ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_open2(ISC_STATUS*, - isc_tr_handle*, - const ISC_SCHAR*, - unsigned short, - XSQLDA*, - XSQLDA*); +ISC_STATUS ISC_EXPORT isc_embed_dsql_insert (ISC_STATUS ISC_FAR *, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_embed_dsql_insert(ISC_STATUS*, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_embed_dsql_prepare(ISC_STATUS*, - isc_db_handle*, - isc_tr_handle*, - const ISC_SCHAR*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - XSQLDA*); - -ISC_STATUS ISC_EXPORT isc_embed_dsql_release(ISC_STATUS*, - const ISC_SCHAR*); +void ISC_EXPORT isc_embed_dsql_length (char ISC_FAR *, + unsigned short *); +ISC_STATUS ISC_EXPORT isc_embed_dsql_prepare (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + char ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + XSQLDA ISC_FAR *); +ISC_STATUS ISC_EXPORT isc_embed_dsql_release (ISC_STATUS ISC_FAR *, + char ISC_FAR *); + /******************************/ /* Other Blob functions */ /******************************/ -BSTREAM* ISC_EXPORT BLOB_open(isc_blob_handle, - ISC_SCHAR*, - int); +BSTREAM ISC_FAR * ISC_EXPORT BLOB_open (isc_blob_handle, + char ISC_FAR *, + int); -int ISC_EXPORT BLOB_put(ISC_SCHAR, - BSTREAM*); +int ISC_EXPORT BLOB_put (char, + BSTREAM ISC_FAR *); -int ISC_EXPORT BLOB_close(BSTREAM*); +int ISC_EXPORT BLOB_close (BSTREAM ISC_FAR *); -int ISC_EXPORT BLOB_get(BSTREAM*); +int ISC_EXPORT BLOB_get (BSTREAM ISC_FAR *); -int ISC_EXPORT BLOB_display(ISC_QUAD*, - isc_db_handle, - isc_tr_handle, - const ISC_SCHAR*); +int ISC_EXPORT BLOB_display (ISC_QUAD ISC_FAR *, + isc_db_handle, + isc_tr_handle, + char ISC_FAR *); -int ISC_EXPORT BLOB_dump(ISC_QUAD*, - isc_db_handle, - isc_tr_handle, - const ISC_SCHAR*); +int ISC_EXPORT BLOB_dump (ISC_QUAD ISC_FAR *, + isc_db_handle, + isc_tr_handle, + char ISC_FAR *); -int ISC_EXPORT BLOB_edit(ISC_QUAD*, - isc_db_handle, - isc_tr_handle, - const ISC_SCHAR*); +int ISC_EXPORT BLOB_edit (ISC_QUAD ISC_FAR *, + isc_db_handle, + isc_tr_handle, + char ISC_FAR *); -int ISC_EXPORT BLOB_load(ISC_QUAD*, - isc_db_handle, - isc_tr_handle, - const ISC_SCHAR*); +int ISC_EXPORT BLOB_load (ISC_QUAD ISC_FAR *, + isc_db_handle, + isc_tr_handle, + char ISC_FAR *); -int ISC_EXPORT BLOB_text_dump(ISC_QUAD*, - isc_db_handle, - isc_tr_handle, - const ISC_SCHAR*); +int ISC_EXPORT BLOB_text_dump (ISC_QUAD ISC_FAR *, + isc_db_handle, + isc_tr_handle, + char ISC_FAR *); -int ISC_EXPORT BLOB_text_load(ISC_QUAD*, - isc_db_handle, - isc_tr_handle, - const ISC_SCHAR*); - -BSTREAM* ISC_EXPORT Bopen(ISC_QUAD*, - isc_db_handle, - isc_tr_handle, - const ISC_SCHAR*); - -/* Disabled, not found anywhere. -BSTREAM* ISC_EXPORT Bopen2(ISC_QUAD*, - isc_db_handle, - isc_tr_handle, - const ISC_SCHAR*, - unsigned short); -*/ +int ISC_EXPORT BLOB_text_load (ISC_QUAD ISC_FAR *, + isc_db_handle, + isc_tr_handle, + char ISC_FAR *); +BSTREAM ISC_FAR * ISC_EXPORT Bopen (ISC_QUAD ISC_FAR *, + isc_db_handle, + isc_tr_handle, + char ISC_FAR *); +BSTREAM ISC_FAR * ISC_EXPORT Bopen2 (ISC_QUAD ISC_FAR *, + isc_db_handle, + isc_tr_handle, + char ISC_FAR *, + unsigned short); + /******************************/ /* Other Misc functions */ /******************************/ -ISC_LONG ISC_EXPORT isc_ftof(const ISC_SCHAR*, - const unsigned short, - ISC_SCHAR*, - const unsigned short); +ISC_LONG ISC_EXPORT isc_ftof (char ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short); -ISC_STATUS ISC_EXPORT isc_print_blr(const ISC_SCHAR*, - ISC_PRINT_CALLBACK, - void*, - short); +ISC_STATUS ISC_EXPORT isc_print_blr (char ISC_FAR *, + isc_callback, + void ISC_FAR *, + short); -void ISC_EXPORT isc_set_debug(int); +void ISC_EXPORT isc_set_debug (int); -void ISC_EXPORT isc_qtoq(const ISC_QUAD*, - ISC_QUAD*); +void ISC_EXPORT isc_qtoq (ISC_QUAD ISC_FAR *, + ISC_QUAD ISC_FAR *); -void ISC_EXPORT isc_vtof(const ISC_SCHAR*, - ISC_SCHAR*, - unsigned short); +void ISC_EXPORT isc_vtof (char ISC_FAR *, + char ISC_FAR *, + unsigned short); -void ISC_EXPORT isc_vtov(const ISC_SCHAR*, - ISC_SCHAR*, - short); +void ISC_EXPORT isc_vtov (char ISC_FAR *, + char ISC_FAR *, + short); -int ISC_EXPORT isc_version(isc_db_handle*, - ISC_VERSION_CALLBACK, - void*); - -ISC_LONG ISC_EXPORT isc_reset_fpe(ISC_USHORT); - -uintptr_t ISC_EXPORT isc_baddress(ISC_SCHAR*); -void ISC_EXPORT isc_baddress_s(const ISC_SCHAR*, - uintptr_t*); +int ISC_EXPORT isc_version (isc_db_handle ISC_FAR *, + isc_callback, + void ISC_FAR *); +ISC_LONG ISC_EXPORT isc_reset_fpe (unsigned short); + /*****************************************/ /* Service manager functions */ /*****************************************/ -#define ADD_SPB_LENGTH(p, length) {*(p)++ = (length); \ - *(p)++ = (length) >> 8;} +#define ADD_SPB_LENGTH(p, length) {*(p)++ = (char) (((ISC_USHORT)length) >> 0); \ + *(p)++ = (char) (((ISC_USHORT)length) >> 8);} -#define ADD_SPB_NUMERIC(p, data) {*(p)++ = (ISC_SCHAR) (data); \ - *(p)++ = (ISC_SCHAR) ((data) >> 8); \ - *(p)++ = (ISC_SCHAR) ((data) >> 16); \ - *(p)++ = (ISC_SCHAR) ((data) >> 24);} +#define ADD_SPB_NUMERIC(p, data) {*(p)++ = (char) (((ISC_ULONG)data) >> 0); \ + *(p)++ = (char) (((ISC_ULONG)data) >> 8); \ + *(p)++ = (char) (((ISC_ULONG)data) >> 16); \ + *(p)++ = (char) (((ISC_ULONG)data) >> 24);} -ISC_STATUS ISC_EXPORT isc_service_attach(ISC_STATUS*, - unsigned short, - const ISC_SCHAR*, - isc_svc_handle*, - unsigned short, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_service_attach (ISC_STATUS ISC_FAR *, + unsigned short, + char ISC_FAR *, + isc_svc_handle ISC_FAR *, + unsigned short, + char ISC_FAR *); -ISC_STATUS ISC_EXPORT isc_service_detach(ISC_STATUS *, - isc_svc_handle *); - -ISC_STATUS ISC_EXPORT isc_service_query(ISC_STATUS*, - isc_svc_handle*, - isc_resv_handle*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - const ISC_SCHAR*, - unsigned short, - ISC_SCHAR*); - -ISC_STATUS ISC_EXPORT isc_service_start(ISC_STATUS*, - isc_svc_handle*, - isc_resv_handle*, - unsigned short, - const ISC_SCHAR*); +ISC_STATUS ISC_EXPORT isc_service_detach (ISC_STATUS ISC_FAR *, + isc_svc_handle ISC_FAR *); +ISC_STATUS ISC_EXPORT isc_service_query (ISC_STATUS ISC_FAR *, + isc_svc_handle ISC_FAR *, + isc_resv_handle ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + char ISC_FAR *, + unsigned short, + char ISC_FAR *); +ISC_STATUS ISC_EXPORT isc_service_start (ISC_STATUS ISC_FAR *, + isc_svc_handle ISC_FAR *, + isc_resv_handle ISC_FAR *, + unsigned short, + char ISC_FAR*); + /********************************/ /* Client information functions */ /********************************/ - -void ISC_EXPORT isc_get_client_version ( ISC_SCHAR *); +void ISC_EXPORT isc_get_client_version ( char ISC_FAR *); int ISC_EXPORT isc_get_client_major_version (); int ISC_EXPORT isc_get_client_minor_version (); + +/*******************************/ +/* Forms functions */ +/*******************************/ + +ISC_STATUS ISC_EXPORT isc_compile_map (ISC_STATUS ISC_FAR *, + isc_form_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_compile_menu (ISC_STATUS ISC_FAR *, + isc_form_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_compile_sub_map (ISC_STATUS ISC_FAR *, + isc_win_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_create_window (ISC_STATUS ISC_FAR *, + isc_win_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *, + short ISC_FAR *, + short ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_delete_window (ISC_STATUS ISC_FAR *, + isc_win_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_drive_form (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_win_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + unsigned char ISC_FAR *, + unsigned char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_drive_menu (ISC_STATUS ISC_FAR *, + isc_win_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *, + short ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *, + ISC_LONG ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_form_delete (ISC_STATUS ISC_FAR *, + isc_form_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_form_fetch (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + unsigned char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_form_insert (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + unsigned char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_get_entree (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *, + ISC_LONG ISC_FAR *, + short ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_initialize_menu (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_menu (ISC_STATUS ISC_FAR *, + isc_win_handle ISC_FAR *, + isc_req_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_load_form (ISC_STATUS ISC_FAR *, + isc_db_handle ISC_FAR *, + isc_tr_handle ISC_FAR *, + isc_form_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_pop_window (ISC_STATUS ISC_FAR *, + isc_win_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_put_entree (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *, + short ISC_FAR *, + char ISC_FAR *, + ISC_LONG ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_reset_form (ISC_STATUS ISC_FAR *, + isc_req_handle ISC_FAR *); + +ISC_STATUS ISC_EXPORT isc_suspend_window (ISC_STATUS ISC_FAR *, + isc_win_handle ISC_FAR *); + #ifdef __cplusplus -} /* extern "C" */ +}; #endif + +#else /* __cplusplus || __STDC__ */ + +ISC_STATUS ISC_EXPORT isc_attach_database(); +ISC_STATUS ISC_EXPORT isc_array_gen_sdl(); +ISC_STATUS ISC_EXPORT isc_array_get_slice(); +ISC_STATUS ISC_EXPORT isc_array_get_slice2(); +ISC_STATUS ISC_EXPORT isc_array_lookup_bounds(); +ISC_STATUS ISC_EXPORT isc_array_lookup_desc(); +ISC_STATUS ISC_EXPORT isc_array_set_desc(); +ISC_STATUS ISC_EXPORT isc_array_put_slice(); +ISC_STATUS ISC_EXPORT isc_array_put_slice2(); +ISC_STATUS ISC_EXPORT isc_blob_gen_bpb(); +ISC_STATUS ISC_EXPORT isc_blob_info(); +ISC_STATUS ISC_EXPORT isc_blob_lookup_desc(); +ISC_STATUS ISC_EXPORT isc_blob_set_desc(); +ISC_STATUS ISC_EXPORT isc_cancel_blob(); +ISC_STATUS ISC_EXPORT isc_cancel_events(); +ISC_STATUS ISC_EXPORT isc_close_blob(); +ISC_STATUS ISC_EXPORT isc_commit_retaining(); +ISC_STATUS ISC_EXPORT isc_commit_transaction(); +ISC_STATUS ISC_EXPORT isc_compile_request(); +ISC_STATUS ISC_EXPORT isc_compile_request2(); +ISC_STATUS ISC_EXPORT isc_create_blob(); +ISC_STATUS ISC_EXPORT isc_create_blob2(); +ISC_STATUS ISC_EXPORT isc_create_database(); +ISC_STATUS ISC_EXPORT isc_database_info(); +ISC_STATUS ISC_EXPORT isc_ddl(); +void ISC_EXPORT isc_decode_date(); +void ISC_EXPORT isc_decode_sql_date(); +void ISC_EXPORT isc_decode_sql_time(); +void ISC_EXPORT isc_decode_timestamp(); +ISC_STATUS ISC_EXPORT isc_detach_database(); +ISC_STATUS ISC_EXPORT isc_drop_database(); +void ISC_EXPORT isc_encode_date(); +void ISC_EXPORT isc_encode_sql_date(); +void ISC_EXPORT isc_encode_sql_time(); +void ISC_EXPORT isc_encode_timestamp(); +ISC_LONG ISC_EXPORT isc_event_block(); +ISC_USHORT ISC_EXPORT isc_event_block_a(); +void ISC_EXPORT isc_event_counts(); +void ISC_EXPORT isc_expand_dpb(); +int ISC_EXPORT isc_modify_dpb(); +ISC_LONG ISC_EXPORT isc_free(); +ISC_STATUS ISC_EXPORT isc_get_segment(); +ISC_STATUS ISC_EXPORT isc_get_slice(); +ISC_STATUS ISC_EXPORT isc_interprete(); +ISC_STATUS ISC_EXPORT isc_open_blob(); +ISC_STATUS ISC_EXPORT isc_open_blob2(); +ISC_STATUS ISC_EXPORT isc_prepare_transaction(); +ISC_STATUS ISC_EXPORT isc_prepare_transaction2(); +void ISC_EXPORT isc_print_sqlerror(); +ISC_STATUS ISC_EXPORT isc_print_status(); +ISC_STATUS ISC_EXPORT isc_put_segment(); +ISC_STATUS ISC_EXPORT isc_put_slice(); +ISC_STATUS ISC_EXPORT isc_que_events(); +ISC_STATUS ISC_EXPORT isc_receive(); +ISC_STATUS ISC_EXPORT isc_reconnect_transaction(); +ISC_STATUS ISC_EXPORT isc_release_request(); +ISC_STATUS ISC_EXPORT isc_release_savepoint(); +ISC_STATUS ISC_EXPORT isc_request_info(); +ISC_LONG ISC_EXPORT isc_reset_fpe (); +ISC_STATUS ISC_EXPORT isc_rollback_transaction(); +ISC_STATUS ISC_EXPORT isc_rollback_retaining(); +ISC_STATUS ISC_EXPORT isc_rollback_savepoint(); +ISC_STATUS ISC_EXPORT isc_seek_blob(); +ISC_STATUS ISC_EXPORT isc_send(); +ISC_STATUS ISC_EXPORT isc_service_attach(); +ISC_STATUS ISC_EXPORT isc_service_detach(); +ISC_STATUS ISC_EXPORT isc_service_query(); +ISC_STATUS ISC_EXPORT isc_service_start(); +ISC_STATUS ISC_EXPORT isc_start_and_send(); +ISC_STATUS ISC_EXPORT isc_start_multiple(); +ISC_STATUS ISC_EXPORT isc_start_request(); +ISC_STATUS ISC_EXPORT isc_start_savepoint(); +ISC_STATUS ISC_EXPORT isc_start_transaction(); +ISC_LONG ISC_EXPORT isc_sqlcode(); +ISC_STATUS ISC_EXPORT isc_transaction_info(); +ISC_STATUS ISC_EXPORT isc_transact_request(); +ISC_STATUS ISC_EXPORT isc_unwind_request(); +ISC_STATUS ISC_EXPORT isc_wait_for_event(); +ISC_LONG ISC_EXPORT isc_ftof(); +ISC_STATUS ISC_EXPORT isc_print_blr(); +void ISC_EXPORT isc_set_debug(); +void ISC_EXPORT isc_qtoq(); +ISC_LONG ISC_EXPORT isc_vax_integer(); +void ISC_EXPORT isc_vtof(); +void ISC_EXPORT isc_vtov(); +int ISC_EXPORT isc_version(); +#ifndef __STDC__ +/******************/ +/* Blob functions */ +/******************/ + +BSTREAM ISC_FAR * ISC_EXPORT Bopen(); +BSTREAM ISC_FAR * ISC_EXPORT BLOB_open(); +BSTREAM ISC_FAR * ISC_EXPORT Bopen2(); +#endif /* __STDC__ */ + +#endif /* __cplusplus || __STDC__ */ + /***************************************************/ /* Actions to pass to the blob filter (ctl_source) */ /***************************************************/ - #define isc_blob_filter_open 0 #define isc_blob_filter_get_segment 1 #define isc_blob_filter_close 2 @@ -1328,281 +1625,288 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_blob_filter_free 6 #define isc_blob_filter_seek 7 +/* START CONVERT TAG */ /*******************/ /* Blr definitions */ /*******************/ +/* END CONVERT TAG */ + +#ifndef _JRD_BLR_H_ + +#define blr_word(n) ((n) % 256), ((n) / 256) + +/* START CONVERT TAG */ +#define blr_text 14 +#define blr_text2 15 +#define blr_short 7 +#define blr_long 8 +#define blr_quad 9 +#define blr_int64 16 +#define blr_float 10 +#define blr_double 27 +#define blr_d_float 11 +#define blr_timestamp 35 +#define blr_varying 37 +#define blr_varying2 38 +#define blr_blob 261 +#define blr_cstring 40 +#define blr_cstring2 41 +#define blr_blob_id 45 +#define blr_sql_date 12 +#define blr_sql_time 13 +#define blr_boolean_dtype 17 -#ifndef JRD_BLR_H -#define JRD_BLR_H +/* Historical alias for pre V6 applications */ +#define blr_date blr_timestamp -#define blr_text (unsigned char)14 -#define blr_text2 (unsigned char)15 -#define blr_short (unsigned char)7 -#define blr_long (unsigned char)8 -#define blr_quad (unsigned char)9 -#define blr_float (unsigned char)10 -#define blr_double (unsigned char)27 -#define blr_d_float (unsigned char)11 -#define blr_timestamp (unsigned char)35 -#define blr_varying (unsigned char)37 -#define blr_varying2 (unsigned char)38 -#define blr_blob (unsigned short)261 -#define blr_cstring (unsigned char)40 -#define blr_cstring2 (unsigned char)41 -#define blr_blob_id (unsigned char)45 -#define blr_sql_date (unsigned char)12 -#define blr_sql_time (unsigned char)13 -#define blr_int64 (unsigned char)16 -#define blr_blob2 (unsigned char)17 -#define blr_domain_name (unsigned char)18 -#define blr_domain_name2 (unsigned char)19 -#define blr_not_nullable (unsigned char)20 +#define blr_inner 0 +#define blr_left 1 +#define blr_right 2 +#define blr_full 3 -#define blr_domain_type_of (unsigned char)0 -#define blr_domain_full (unsigned char)1 +#define blr_gds_code 0 +#define blr_sql_code 1 +#define blr_exception 2 +#define blr_trigger_code 3 +#define blr_default_code 4 -#define blr_date blr_timestamp +#define blr_immediate 0 +#define blr_deferred 1 -#define blr_inner (unsigned char)0 -#define blr_left (unsigned char)1 -#define blr_right (unsigned char)2 -#define blr_full (unsigned char)3 +#define blr_restrict 0 +#define blr_cascade 1 -#define blr_gds_code (unsigned char)0 -#define blr_sql_code (unsigned char)1 -#define blr_exception (unsigned char)2 -#define blr_trigger_code (unsigned char)3 -#define blr_default_code (unsigned char)4 -#define blr_raise (unsigned char)5 -#define blr_exception_msg (unsigned char)6 +#define blr_version4 4 +#define blr_version5 5 +#define blr_eoc 76 +#define blr_end 255 -#define blr_version4 (unsigned char)4 -#define blr_version5 (unsigned char)5 -#define blr_eoc (unsigned char)76 -#define blr_end (unsigned char)255 +#define blr_assignment 1 +#define blr_begin 2 +#define blr_dcl_variable 3 +#define blr_message 4 +#define blr_erase 5 +#define blr_fetch 6 +#define blr_for 7 +#define blr_if 8 +#define blr_loop 9 +#define blr_modify 10 +#define blr_handler 11 +#define blr_receive 12 +#define blr_select 13 +#define blr_send 14 +#define blr_store 15 +#define blr_truncate 16 +#define blr_label 17 +#define blr_leave 18 +#define blr_store2 19 +#define blr_post 20 -#define blr_assignment (unsigned char)1 -#define blr_begin (unsigned char)2 -#define blr_dcl_variable (unsigned char)3 -#define blr_message (unsigned char)4 -#define blr_erase (unsigned char)5 -#define blr_fetch (unsigned char)6 -#define blr_for (unsigned char)7 -#define blr_if (unsigned char)8 -#define blr_loop (unsigned char)9 -#define blr_modify (unsigned char)10 -#define blr_handler (unsigned char)11 -#define blr_receive (unsigned char)12 -#define blr_select (unsigned char)13 -#define blr_send (unsigned char)14 -#define blr_store (unsigned char)15 -#define blr_label (unsigned char)17 -#define blr_leave (unsigned char)18 -#define blr_store2 (unsigned char)19 -#define blr_post (unsigned char)20 -#define blr_literal (unsigned char)21 -#define blr_dbkey (unsigned char)22 -#define blr_field (unsigned char)23 -#define blr_fid (unsigned char)24 -#define blr_parameter (unsigned char)25 -#define blr_variable (unsigned char)26 -#define blr_average (unsigned char)27 -#define blr_count (unsigned char)28 -#define blr_maximum (unsigned char)29 -#define blr_minimum (unsigned char)30 -#define blr_total (unsigned char)31 +#define blr_literal 21 +#define blr_dbkey 22 +#define blr_field 23 +#define blr_fid 24 +#define blr_parameter 25 +#define blr_variable 26 +#define blr_average 27 +#define blr_count 28 +#define blr_maximum 29 +#define blr_minimum 30 +#define blr_total 31 +#define blr_add 34 +#define blr_subtract 35 +#define blr_multiply 36 +#define blr_divide 37 +#define blr_negate 38 +#define blr_concatenate 39 +#define blr_substring 40 +#define blr_parameter2 41 +#define blr_from 42 +#define blr_via 43 +#define blr_user_name 44 +#define blr_null 45 -#define blr_add (unsigned char)34 -#define blr_subtract (unsigned char)35 -#define blr_multiply (unsigned char)36 -#define blr_divide (unsigned char)37 -#define blr_negate (unsigned char)38 -#define blr_concatenate (unsigned char)39 -#define blr_substring (unsigned char)40 -#define blr_parameter2 (unsigned char)41 -#define blr_from (unsigned char)42 -#define blr_via (unsigned char)43 -#define blr_parameter2_old (unsigned char)44 -#define blr_user_name (unsigned char)44 -#define blr_null (unsigned char)45 +#define blr_eql 47 +#define blr_neq 48 +#define blr_gtr 49 +#define blr_geq 50 +#define blr_lss 51 +#define blr_leq 52 +#define blr_containing 53 +#define blr_matching 54 +#define blr_starting 55 +#define blr_between 56 +#define blr_or 57 +#define blr_and 58 +#define blr_not 59 +#define blr_any 60 +#define blr_missing 61 +#define blr_unique 62 +#define blr_like 63 +#define blr_with 64 -#define blr_equiv (unsigned char)46 -#define blr_eql (unsigned char)47 -#define blr_neq (unsigned char)48 -#define blr_gtr (unsigned char)49 -#define blr_geq (unsigned char)50 -#define blr_lss (unsigned char)51 -#define blr_leq (unsigned char)52 -#define blr_containing (unsigned char)53 -#define blr_matching (unsigned char)54 -#define blr_starting (unsigned char)55 -#define blr_between (unsigned char)56 -#define blr_or (unsigned char)57 -#define blr_and (unsigned char)58 -#define blr_not (unsigned char)59 -#define blr_any (unsigned char)60 -#define blr_missing (unsigned char)61 -#define blr_unique (unsigned char)62 -#define blr_like (unsigned char)63 +#define blr_stream 65 +#define blr_set_index 66 +#define blr_rse 67 +#define blr_first 68 +#define blr_project 69 +#define blr_sort 70 +#define blr_boolean 71 +#define blr_ascending 72 +#define blr_descending 73 +#define blr_relation 74 +#define blr_rid 75 +#define blr_union 76 +#define blr_map 77 +#define blr_group_by 78 +#define blr_aggregate 79 +#define blr_join_type 80 +#define blr_rows 81 +#define blr_derived_relation 82 -#define blr_rse (unsigned char)67 -#define blr_first (unsigned char)68 -#define blr_project (unsigned char)69 -#define blr_sort (unsigned char)70 -#define blr_boolean (unsigned char)71 -#define blr_ascending (unsigned char)72 -#define blr_descending (unsigned char)73 -#define blr_relation (unsigned char)74 -#define blr_rid (unsigned char)75 -#define blr_union (unsigned char)76 -#define blr_map (unsigned char)77 -#define blr_group_by (unsigned char)78 -#define blr_aggregate (unsigned char)79 -#define blr_join_type (unsigned char)80 +/* sub parameters for blr_rows */ -#define blr_agg_count (unsigned char)83 -#define blr_agg_max (unsigned char)84 -#define blr_agg_min (unsigned char)85 -#define blr_agg_total (unsigned char)86 -#define blr_agg_average (unsigned char)87 -#define blr_parameter3 (unsigned char)88 -#define blr_run_max (unsigned char)89 -#define blr_run_min (unsigned char)90 -#define blr_run_total (unsigned char)91 -#define blr_run_average (unsigned char)92 -#define blr_agg_count2 (unsigned char)93 -#define blr_agg_count_distinct (unsigned char)94 -#define blr_agg_total_distinct (unsigned char)95 -#define blr_agg_average_distinct (unsigned char)96 +#define blr_ties 0 +#define blr_percent 1 -#define blr_function (unsigned char)100 -#define blr_gen_id (unsigned char)101 -#define blr_prot_mask (unsigned char)102 -#define blr_upcase (unsigned char)103 -#define blr_lock_state (unsigned char)104 -#define blr_value_if (unsigned char)105 -#define blr_matching2 (unsigned char)106 -#define blr_index (unsigned char)107 -#define blr_ansi_like (unsigned char)108 +#define blr_agg_count 83 +#define blr_agg_max 84 +#define blr_agg_min 85 +#define blr_agg_total 86 +#define blr_agg_average 87 +#define blr_parameter3 88 +#define blr_run_count 118 +#define blr_run_max 89 +#define blr_run_min 90 +#define blr_run_total 91 +#define blr_run_average 92 +#define blr_agg_count2 93 +#define blr_agg_count_distinct 94 +#define blr_agg_total_distinct 95 +#define blr_agg_average_distinct 96 -#define blr_seek (unsigned char)112 +#define blr_function 100 +#define blr_gen_id 101 +#define blr_prot_mask 102 +#define blr_upcase 103 +#define blr_lock_state 104 +#define blr_value_if 105 +#define blr_matching2 106 +#define blr_index 107 +#define blr_ansi_like 108 +#define blr_bookmark 109 +#define blr_crack 110 +#define blr_force_crack 111 +#define blr_seek 112 +#define blr_find 113 -#define blr_continue (unsigned char)0 -#define blr_forward (unsigned char)1 -#define blr_backward (unsigned char)2 -#define blr_bof_forward (unsigned char)3 -#define blr_eof_backward (unsigned char)4 +#define blr_continue 0 +#define blr_forward 1 +#define blr_backward 2 +#define blr_bof_forward 3 +#define blr_eof_backward 4 -#define blr_run_count (unsigned char)118 -#define blr_rs_stream (unsigned char)119 -#define blr_exec_proc (unsigned char)120 +#define blr_lock_relation 114 +#define blr_lock_record 115 +#define blr_set_bookmark 116 +#define blr_get_bookmark 117 +#define blr_rs_stream 119 +#define blr_exec_proc 120 +#define blr_begin_range 121 +#define blr_end_range 122 +#define blr_delete_range 123 +#define blr_procedure 124 +#define blr_pid 125 +#define blr_exec_pid 126 +#define blr_singular 127 +#define blr_abort 128 +#define blr_block 129 +#define blr_error_handler 130 +#define blr_cast 131 +#define blr_release_lock 132 +#define blr_release_locks 133 +#define blr_start_savepoint 134 +#define blr_end_savepoint 135 +#define blr_find_dbkey 136 +#define blr_range_relation 137 +#define blr_delete_ranges 138 -#define blr_procedure (unsigned char)124 -#define blr_pid (unsigned char)125 -#define blr_exec_pid (unsigned char)126 -#define blr_singular (unsigned char)127 -#define blr_abort (unsigned char)128 -#define blr_block (unsigned char)129 -#define blr_error_handler (unsigned char)130 +#define blr_plan 139 +#define blr_merge 140 +#define blr_join 141 +#define blr_sequential 142 +#define blr_navigational 143 +#define blr_indices 144 +#define blr_retrieve 145 -#define blr_cast (unsigned char)131 +#define blr_relation2 146 +#define blr_rid2 147 +#define blr_reset_stream 148 +#define blr_release_bookmark 149 +#define blr_set_generator 150 +#define blr_ansi_any 151 +#define blr_exists 152 +#define blr_cardinality 153 -#define blr_start_savepoint (unsigned char)134 -#define blr_end_savepoint (unsigned char)135 +#define blr_record_version 154 /* get tid of record */ +#define blr_stall 155 /* fake server stall */ +#define blr_seek_no_warn 156 +#define blr_find_dbkey_version 157 +#define blr_ansi_all 158 -#define blr_plan (unsigned char)139 -#define blr_merge (unsigned char)140 -#define blr_join (unsigned char)141 -#define blr_sequential (unsigned char)142 -#define blr_navigational (unsigned char)143 -#define blr_indices (unsigned char)144 -#define blr_retrieve (unsigned char)145 +#define blr_extract 159 -#define blr_relation2 (unsigned char)146 -#define blr_rid2 (unsigned char)147 +/* sub parameters for blr_extract */ -#define blr_set_generator (unsigned char)150 +#define blr_extract_year 0 +#define blr_extract_month 1 +#define blr_extract_day 2 +#define blr_extract_hour 3 +#define blr_extract_minute 4 +#define blr_extract_second 5 +#define blr_extract_weekday 6 +#define blr_extract_yearday 7 -#define blr_ansi_any (unsigned char)151 -#define blr_exists (unsigned char)152 +#define blr_current_date 160 +#define blr_current_timestamp 161 +#define blr_current_time 162 -#define blr_record_version (unsigned char)154 -#define blr_stall (unsigned char)155 +/* These verbs were added in 6.0, primarily to support 64-bit integers */ -#define blr_ansi_all (unsigned char)158 +#define blr_add2 163 +#define blr_subtract2 164 +#define blr_multiply2 165 +#define blr_divide2 166 +#define blr_agg_total2 167 +#define blr_agg_total_distinct2 168 +#define blr_agg_average2 169 +#define blr_agg_average_distinct2 170 +#define blr_average2 171 +#define blr_gen_id2 172 +#define blr_set_generator2 173 -#define blr_extract (unsigned char)159 +/* These verbs were added in 7.0 for BOOLEAN dtype supprt */ +#define blr_boolean_true 174 +#define blr_boolean_false 175 -#define blr_extract_year (unsigned char)0 -#define blr_extract_month (unsigned char)1 -#define blr_extract_day (unsigned char)2 -#define blr_extract_hour (unsigned char)3 -#define blr_extract_minute (unsigned char)4 -#define blr_extract_second (unsigned char)5 -#define blr_extract_weekday (unsigned char)6 -#define blr_extract_yearday (unsigned char)7 -#define blr_extract_millisecond (unsigned char)8 -#define blr_extract_week (unsigned char)9 - -#define blr_current_date (unsigned char)160 -#define blr_current_timestamp (unsigned char)161 -#define blr_current_time (unsigned char)162 - -#define blr_post_arg (unsigned char)163 -#define blr_exec_into (unsigned char)164 -#define blr_user_savepoint (unsigned char)165 -#define blr_dcl_cursor (unsigned char)166 -#define blr_cursor_stmt (unsigned char)167 -#define blr_current_timestamp2 (unsigned char)168 -#define blr_current_time2 (unsigned char)169 -#define blr_agg_list (unsigned char)170 -#define blr_agg_list_distinct (unsigned char)171 -#define blr_modify2 (unsigned char)172 - -#define blr_current_role (unsigned char)174 -#define blr_skip (unsigned char)175 - -#define blr_exec_sql (unsigned char)176 -#define blr_internal_info (unsigned char)177 -#define blr_nullsfirst (unsigned char)178 -#define blr_writelock (unsigned char)179 -#define blr_nullslast (unsigned char)180 - -#define blr_lowcase (unsigned char)181 -#define blr_strlen (unsigned char)182 - -#define blr_strlen_bit (unsigned char)0 -#define blr_strlen_char (unsigned char)1 -#define blr_strlen_octet (unsigned char)2 - -#define blr_trim (unsigned char)183 - -#define blr_trim_both (unsigned char)0 -#define blr_trim_leading (unsigned char)1 -#define blr_trim_trailing (unsigned char)2 - -#define blr_trim_spaces (unsigned char)0 -#define blr_trim_characters (unsigned char)1 - -#define blr_savepoint_set (unsigned char)0 -#define blr_savepoint_release (unsigned char)1 -#define blr_savepoint_undo (unsigned char)2 -#define blr_savepoint_release_single (unsigned char)3 - -#define blr_cursor_open (unsigned char)0 -#define blr_cursor_close (unsigned char)1 -#define blr_cursor_fetch (unsigned char)2 - -#define blr_init_variable (unsigned char)184 -#define blr_recurse (unsigned char)185 -#define blr_sys_function (unsigned char)186 - -#endif - - -#ifndef INCLUDE_CONSTS_PUB_H -#define INCLUDE_CONSTS_PUB_H +/* These verbs were added in 7.1 for SQL savepoint support */ +#define blr_start_savepoint2 176 +#define blr_release_savepoint 177 +#define blr_rollback_savepoint 178 +/* added for EXECUTE STATEMENT in 10.0 */ +#define blr_exec_stmt 179 +#define blr_exec_stmt2 180 +/* added for CHANGE VIEW support in 12.0.1 */ +#define blr_changed 181 +#define blr_stored 182 +#define blr_modified 183 +#define blr_erased 184 +#endif /* _JRD_BLR_H_ */ + +/**********************************/ +/* Database parameter block stuff */ +/**********************************/ #define isc_dpb_version1 1 #define isc_dpb_cdd_pathname 1 @@ -1640,7 +1944,7 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dpb_online_dump 33 #define isc_dpb_old_file_size 34 #define isc_dpb_old_num_files 35 -#define isc_dpb_old_file 36 +#define isc_dpb_old_file_name 36 #define isc_dpb_old_start_page 37 #define isc_dpb_old_start_seqno 38 #define isc_dpb_old_start_file 39 @@ -1653,14 +1957,14 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dpb_wal_grp_cmt_wait 46 #define isc_dpb_lc_messages 47 #define isc_dpb_lc_ctype 48 -#define isc_dpb_cache_manager 49 -#define isc_dpb_shutdown 50 -#define isc_dpb_online 51 -#define isc_dpb_shutdown_delay 52 -#define isc_dpb_reserved 53 -#define isc_dpb_overwrite 54 -#define isc_dpb_sec_attach 55 -#define isc_dpb_disable_wal 56 +#define isc_dpb_cache_manager 49 +#define isc_dpb_shutdown 50 +#define isc_dpb_online 51 +#define isc_dpb_shutdown_delay 52 +#define isc_dpb_reserved 53 +#define isc_dpb_overwrite 54 +#define isc_dpb_sec_attach 55 +#define isc_dpb_disable_wal 56 #define isc_dpb_connect_timeout 57 #define isc_dpb_dummy_packet_interval 58 #define isc_dpb_gbak_attach 59 @@ -1670,20 +1974,33 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dpb_sql_dialect 63 #define isc_dpb_set_db_readonly 64 #define isc_dpb_set_db_sql_dialect 65 -#define isc_dpb_gfix_attach 66 -#define isc_dpb_gstat_attach 67 -#define isc_dpb_set_db_charset 68 -#define isc_dpb_gsec_attach 69 -#define isc_dpb_address_path 70 -#define isc_dpb_process_id 71 -#define isc_dpb_no_db_triggers 72 -#define isc_dpb_trusted_auth 73 -#define isc_dpb_process_name 74 +#define isc_dpb_gfix_attach 66 +#define isc_dpb_gstat_attach 67 +#define isc_dpb_gbak_ods_version 68 +#define isc_dpb_gbak_ods_minor_version 69 +#define isc_dpb_set_group_commit 70 +#define isc_dpb_gbak_validate 71 +#define isc_dpb_client_interbase_var 72 +#define isc_dpb_admin_option 73 +#define isc_dpb_flush_interval 74 +#define isc_dpb_instance_name 75 +#define isc_dpb_old_overwrite 76 +#define isc_dpb_archive_database 77 +#define isc_dpb_archive_journals 78 +#define isc_dpb_archive_sweep 79 +#define isc_dpb_archive_dumps 80 +#define isc_dpb_archive_recover 81 +#define isc_dpb_recover_until 82 +#define isc_dpb_force 83 +#define isc_dpb_preallocate 84 +#define isc_dpb_sys_encrypt_password 85 +#define isc_dpb_eua_user_name 86 +#define isc_dpb_transaction 87 /* accepts up to int64 type value */ +#define isc_dpb_ods_version_major 88 -#define isc_dpb_address 1 - -#define isc_dpb_addr_protocol 1 -#define isc_dpb_addr_endpoint 2 +/*********************************/ +/* isc_dpb_verify specific flags */ +/*********************************/ #define isc_dpb_pages 1 #define isc_dpb_records 2 @@ -1693,20 +2010,25 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dpb_repair 32 #define isc_dpb_ignore 64 -#define isc_dpb_shut_cache 0x1 -#define isc_dpb_shut_attachment 0x2 -#define isc_dpb_shut_transaction 0x4 -#define isc_dpb_shut_force 0x8 -#define isc_dpb_shut_mode_mask 0x70 +/***********************************/ +/* isc_dpb_shutdown specific flags */ +/***********************************/ -#define isc_dpb_shut_default 0x0 -#define isc_dpb_shut_normal 0x10 -#define isc_dpb_shut_multi 0x20 -#define isc_dpb_shut_single 0x30 -#define isc_dpb_shut_full 0x40 +#define isc_dpb_shut_cache 1 +#define isc_dpb_shut_attachment 2 +#define isc_dpb_shut_transaction 4 +#define isc_dpb_shut_force 8 + +/**************************************/ +/* Bit assignments in RDB$SYSTEM_FLAG */ +/**************************************/ #define RDB_system 1 #define RDB_id_assigned 2 + +/*************************************/ +/* Transaction parameter block stuff */ +/*************************************/ #define isc_tpb_version1 1 #define isc_tpb_version3 3 @@ -1724,13 +2046,19 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_tpb_verb_time 12 #define isc_tpb_commit_time 13 #define isc_tpb_ignore_limbo 14 -#define isc_tpb_read_committed 15 -#define isc_tpb_autocommit 16 -#define isc_tpb_rec_version 17 -#define isc_tpb_no_rec_version 18 -#define isc_tpb_restart_requests 19 +#define isc_tpb_read_committed 15 +#define isc_tpb_autocommit 16 +#define isc_tpb_rec_version 17 +#define isc_tpb_no_rec_version 18 +#define isc_tpb_restart_requests 19 #define isc_tpb_no_auto_undo 20 -#define isc_tpb_lock_timeout 21 +#define isc_tpb_no_savepoint 21 +#define isc_tpb_exclusivity 22 +#define isc_tpb_wait_time 23 + +/************************/ +/* Blob Parameter Block */ +/************************/ #define isc_bpb_version1 1 #define isc_bpb_source_type 1 @@ -1739,67 +2067,322 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_bpb_source_interp 4 #define isc_bpb_target_interp 5 #define isc_bpb_filter_parameter 6 -#define isc_bpb_storage 7 +#define isc_bpb_target_relation_name 7 +#define isc_bpb_target_field_name 8 -#define isc_bpb_type_segmented 0x0 -#define isc_bpb_type_stream 0x1 -#define isc_bpb_storage_main 0x0 -#define isc_bpb_storage_temp 0x2 +#define isc_bpb_type_segmented 0 +#define isc_bpb_type_stream 1 + +/*********************************/ +/* Service parameter block stuff */ +/*********************************/ #define isc_spb_version1 1 #define isc_spb_current_version 2 -#define isc_spb_version isc_spb_current_version -#define isc_spb_user_name isc_dpb_user_name +#define isc_spb_version isc_spb_current_version +#define isc_spb_user_name isc_dpb_user_name #define isc_spb_sys_user_name isc_dpb_sys_user_name #define isc_spb_sys_user_name_enc isc_dpb_sys_user_name_enc #define isc_spb_password isc_dpb_password #define isc_spb_password_enc isc_dpb_password_enc +#define isc_spb_sys_encrypt_password isc_dpb_sys_encrypt_password #define isc_spb_command_line 105 #define isc_spb_dbname 106 #define isc_spb_verbose 107 #define isc_spb_options 108 -#define isc_spb_address_path 109 -#define isc_spb_process_id 110 -#define isc_spb_trusted_auth 111 -#define isc_spb_process_name 112 +#define isc_spb_user_dbname 109 +#define isc_spb_auth_dbname 110 #define isc_spb_connect_timeout isc_dpb_connect_timeout #define isc_spb_dummy_packet_interval isc_dpb_dummy_packet_interval #define isc_spb_sql_role_name isc_dpb_sql_role_name +#define isc_spb_instance_name isc_dpb_instance_name + +/*********************************/ +/* Information call declarations */ +/*********************************/ -#define isc_action_svc_backup 1 -#define isc_action_svc_restore 2 -#define isc_action_svc_repair 3 -#define isc_action_svc_add_user 4 -#define isc_action_svc_delete_user 5 -#define isc_action_svc_modify_user 6 -#define isc_action_svc_display_user 7 -#define isc_action_svc_properties 8 -#define isc_action_svc_add_license 9 -#define isc_action_svc_remove_license 10 -#define isc_action_svc_db_stats 11 -#define isc_action_svc_get_ib_log 12 -#define isc_action_svc_get_fb_log 12 +/****************************/ +/* Common, structural codes */ +/****************************/ -#define isc_info_svc_svr_db_info 50 -#define isc_info_svc_get_license 51 -#define isc_info_svc_get_license_mask 52 -#define isc_info_svc_get_config 53 -#define isc_info_svc_version 54 -#define isc_info_svc_server_version 55 -#define isc_info_svc_implementation 56 -#define isc_info_svc_capabilities 57 -#define isc_info_svc_user_dbpath 58 -#define isc_info_svc_get_env 59 -#define isc_info_svc_get_env_lock 60 -#define isc_info_svc_get_env_msg 61 -#define isc_info_svc_line 62 -#define isc_info_svc_to_eof 63 -#define isc_info_svc_timeout 64 -#define isc_info_svc_get_licensed_users 65 -#define isc_info_svc_limbo_trans 66 -#define isc_info_svc_running 67 -#define isc_info_svc_get_users 68 +#define isc_info_end 1 +#define isc_info_truncated 2 +#define isc_info_error 3 +#define isc_info_data_not_ready 4 +#define isc_info_flag_end 127 + +/******************************/ +/* Database information items */ +/******************************/ + +#define isc_info_db_id 4 +#define isc_info_reads 5 +#define isc_info_writes 6 +#define isc_info_fetches 7 +#define isc_info_marks 8 +#define isc_info_implementation 11 +#define isc_info_version 12 +#define isc_info_base_level 13 +#define isc_info_svr_maj_ver isc_info_base_level +#define isc_info_page_size 14 +#define isc_info_num_buffers 15 +#define isc_info_limbo 16 +#define isc_info_current_memory 17 +#define isc_info_max_memory 18 +#define isc_info_window_turns 19 +#define isc_info_license 20 +#define isc_info_allocation 21 +#define isc_info_attachment_id 22 +#define isc_info_read_seq_count 23 +#define isc_info_read_idx_count 24 +#define isc_info_insert_count 25 +#define isc_info_update_count 26 +#define isc_info_delete_count 27 +#define isc_info_backout_count 28 +#define isc_info_purge_count 29 +#define isc_info_expunge_count 30 +#define isc_info_sweep_interval 31 +#define isc_info_ods_version 32 +#define isc_info_ods_minor_version 33 +#define isc_info_no_reserve 34 +#define isc_info_logfile 35 +#define isc_info_cur_logfile_name 36 +#define isc_info_cur_log_part_offset 37 +#define isc_info_num_wal_buffers 38 +#define isc_info_wal_buffer_size 39 +#define isc_info_wal_ckpt_length 40 +#define isc_info_wal_cur_ckpt_length 41 +#define isc_info_wal_prv_ckpt_fname 42 +#define isc_info_wal_prv_ckpt_poffset 43 +#define isc_info_wal_recv_ckpt_fname 44 +#define isc_info_wal_recv_ckpt_poffset 45 +#define isc_info_wal_ckpt_interval 47 +#define isc_info_wal_num_io 48 +#define isc_info_wal_avg_io_size 49 +#define isc_info_wal_num_commits 50 +#define isc_info_wal_avg_grpc_size 51 +#define isc_info_forced_writes 52 +#define isc_info_user_names 53 +#define isc_info_page_errors 54 +#define isc_info_record_errors 55 +#define isc_info_bpage_errors 56 +#define isc_info_dpage_errors 57 +#define isc_info_ipage_errors 58 +#define isc_info_ppage_errors 59 +#define isc_info_tpage_errors 60 +#define isc_info_set_page_buffers 61 +#define isc_info_db_sql_dialect 62 +#define isc_info_db_read_only 63 +#define isc_info_db_size_in_pages 64 +#define isc_info_db_reads 65 +#define isc_info_db_writes 66 +#define isc_info_db_fetches 67 +#define isc_info_db_marks 68 +#define isc_info_db_group_commit 69 +#define isc_info_att_charset 70 +#define isc_info_svr_min_ver 71 +#define isc_info_ib_env_var 72 +#define isc_info_server_tcp_port 73 +#define isc_info_db_preallocate 74 +#define isc_info_db_encrypted 75 +#define isc_info_db_encryptions 76 +#define isc_info_db_sep_external 77 +#define isc_info_db_eua_active 78 + +/**************************************/ +/* Database information return values */ +/**************************************/ + +#define isc_info_db_impl_rdb_vms 1 +#define isc_info_db_impl_rdb_eln 2 +#define isc_info_db_impl_rdb_eln_dev 3 +#define isc_info_db_impl_rdb_vms_y 4 +#define isc_info_db_impl_rdb_eln_y 5 +#define isc_info_db_impl_jri 6 +#define isc_info_db_impl_jsv 7 +#define isc_info_db_impl_isc_a 25 +#define isc_info_db_impl_isc_u 26 +#define isc_info_db_impl_isc_v 27 +#define isc_info_db_impl_isc_s 28 +#define isc_info_db_impl_isc_apl_68K 25 +#define isc_info_db_impl_isc_vax_ultr 26 +#define isc_info_db_impl_isc_vms 27 +#define isc_info_db_impl_isc_sun_68k 28 +#define isc_info_db_impl_isc_os2 29 +#define isc_info_db_impl_isc_sun4 30 +#define isc_info_db_impl_isc_hp_ux 31 +#define isc_info_db_impl_isc_sun_386i 32 +#define isc_info_db_impl_isc_vms_orcl 33 +#define isc_info_db_impl_isc_mac_aux 34 +#define isc_info_db_impl_isc_rt_aix 35 +#define isc_info_db_impl_isc_mips_ult 36 +#define isc_info_db_impl_isc_xenix 37 +#define isc_info_db_impl_isc_dg 38 +#define isc_info_db_impl_isc_hp_mpexl 39 +#define isc_info_db_impl_isc_hp_ux68K 40 +#define isc_info_db_impl_isc_sgi 41 +#define isc_info_db_impl_isc_sco_unix 42 +#define isc_info_db_impl_isc_cray 43 +#define isc_info_db_impl_isc_imp 44 +#define isc_info_db_impl_isc_delta 45 +#define isc_info_db_impl_isc_next 46 +#define isc_info_db_impl_isc_dos 47 +#define isc_info_db_impl_isc_winnt 48 +#define isc_info_db_impl_isc_epson 49 + +#define isc_info_db_class_access 1 +#define isc_info_db_class_y_valve 2 +#define isc_info_db_class_rem_int 3 +#define isc_info_db_class_rem_srvr 4 +#define isc_info_db_class_pipe_int 7 +#define isc_info_db_class_pipe_srvr 8 +#define isc_info_db_class_sam_int 9 +#define isc_info_db_class_sam_srvr 10 +#define isc_info_db_class_gateway 11 +#define isc_info_db_class_cache 12 + +/*****************************/ +/* Request information items */ +/*****************************/ + +#define isc_info_number_messages 4 +#define isc_info_max_message 5 +#define isc_info_max_send 6 +#define isc_info_max_receive 7 +#define isc_info_state 8 +#define isc_info_message_number 9 +#define isc_info_message_size 10 +#define isc_info_request_cost 11 +#define isc_info_access_path 12 +#define isc_info_req_select_count 13 +#define isc_info_req_insert_count 14 +#define isc_info_req_update_count 15 +#define isc_info_req_delete_count 16 + +/*********************/ +/* Access path items */ +/*********************/ + +#define isc_info_rsb_end 0 +#define isc_info_rsb_begin 1 +#define isc_info_rsb_type 2 +#define isc_info_rsb_relation 3 +#define isc_info_rsb_plan 4 + +/*************/ +/* Rsb types */ +/*************/ + +#define isc_info_rsb_unknown 1 +#define isc_info_rsb_indexed 2 +#define isc_info_rsb_navigate 3 +#define isc_info_rsb_sequential 4 +#define isc_info_rsb_cross 5 +#define isc_info_rsb_sort 6 +#define isc_info_rsb_first 7 +#define isc_info_rsb_boolean 8 +#define isc_info_rsb_union 9 +#define isc_info_rsb_aggregate 10 +#define isc_info_rsb_merge 11 +#define isc_info_rsb_ext_sequential 12 +#define isc_info_rsb_ext_indexed 13 +#define isc_info_rsb_ext_dbkey 14 +#define isc_info_rsb_left_cross 15 +#define isc_info_rsb_select 16 +#define isc_info_rsb_sql_join 17 +#define isc_info_rsb_simulate 18 +#define isc_info_rsb_sim_cross 19 +#define isc_info_rsb_once 20 +#define isc_info_rsb_procedure 21 + +/**********************/ +/* Bitmap expressions */ +/**********************/ + +#define isc_info_rsb_and 1 +#define isc_info_rsb_or 2 +#define isc_info_rsb_dbkey 3 +#define isc_info_rsb_index 4 + +#define isc_info_req_active 2 +#define isc_info_req_inactive 3 +#define isc_info_req_send 4 +#define isc_info_req_receive 5 +#define isc_info_req_select 6 +#define isc_info_req_sql_stall 7 + +/**************************/ +/* Blob information items */ +/**************************/ + +#define isc_info_blob_num_segments 4 +#define isc_info_blob_max_segment 5 +#define isc_info_blob_total_length 6 +#define isc_info_blob_type 7 + +/*********************************/ +/* Transaction information items */ +/*********************************/ + +#define isc_info_tra_id 4 + +/***************************** + * Service action items * + *****************************/ + +/* Range definitions for service actions. Any action outside of + this range is not supported */ +#define isc_action_min 1 + +#define isc_action_svc_backup 1 /* Starts database backup process on the server */ +#define isc_action_svc_restore 2 /* Starts database restore process on the server */ +#define isc_action_svc_repair 3 /* Starts database repair process on the server */ +#define isc_action_svc_add_user 4 /* Adds a new user to the security database */ +#define isc_action_svc_delete_user 5 /* Deletes a user record from the security database */ +#define isc_action_svc_modify_user 6 /* Modifies a user record in the security database */ +#define isc_action_svc_display_user 7 /* Displays a user record from the security database */ +#define isc_action_svc_properties 8 /* Sets database properties */ +#define isc_action_svc_add_license 9 /* Adds a license to the license file */ +#define isc_action_svc_remove_license 10 /* Removes a license from the license file */ +#define isc_action_svc_db_stats 11 /* Retrieves database statistics */ +#define isc_action_svc_get_ib_log 12 /* Retrieves the InterBase log file from the server */ +#define isc_action_svc_add_db_alias 13 /* Adds a new database alias */ +#define isc_action_svc_delete_db_alias 14 /* Deletes an existing database alias */ +#define isc_action_svc_display_db_alias 15 /* Displays an existing database alias */ +#define isc_action_svc_dump 16 /* Starts database dump process on the server */ + +#define isc_action_max 17 /* 1 more than above actions */ + +/***************************** + * Service information items * + *****************************/ + +#define isc_info_svc_svr_db_info 50 /* Retrieves the number of attachments and databases */ +#define isc_info_svc_get_license 51 /* Retrieves all license keys and IDs from the license file */ +#define isc_info_svc_get_license_mask 52 /* Retrieves a bitmask representing licensed options on the server */ +#define isc_info_svc_get_config 53 /* Retrieves the parameters and values for IB_CONFIG */ +#define isc_info_svc_version 54 /* Retrieves the version of the services manager */ +#define isc_info_svc_server_version 55 /* Retrieves the version of the InterBase server */ +#define isc_info_svc_implementation 56 /* Retrieves the implementation of the InterBase server */ +#define isc_info_svc_capabilities 57 /* Retrieves a bitmask representing the server's capabilities */ +#define isc_info_svc_user_dbpath 58 /* Retrieves the path to the security database in use by the server */ +#define isc_info_svc_get_env 59 /* Retrieves the setting of $INTERBASE */ +#define isc_info_svc_get_env_lock 60 /* Retrieves the setting of $INTERBASE_LCK */ +#define isc_info_svc_get_env_msg 61 /* Retrieves the setting of $INTERBASE_MSG */ +#define isc_info_svc_line 62 /* Retrieves 1 line of service output per call */ +#define isc_info_svc_to_eof 63 /* Retrieves as much of the server output as will fit in the supplied buffer */ +#define isc_info_svc_timeout 64 /* Sets / signifies a timeout value for reading service information */ +#define isc_info_svc_get_licensed_users 65 /* Retrieves the number of users licensed for accessing the server */ +#define isc_info_svc_limbo_trans 66 /* Retrieve the limbo transactions */ +#define isc_info_svc_running 67 /* Checks to see if a service is running on an attachment */ +#define isc_info_svc_get_users 68 /* Returns the user information from isc_action_svc_display_users */ +#define isc_info_svc_get_db_alias 69 /* Returns the database alias information from isc_action_svc_display_db_alias */ +#define isc_info_svc_product_identifier 70 /* Returns embedding application's product identifier, if present in license */ + +/****************************************************** + * Parameters for isc_action_{add|delete|modify)_user * + ******************************************************/ #define isc_spb_sec_userid 5 #define isc_spb_sec_groupid 6 @@ -1810,13 +2393,123 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_spb_sec_middlename 11 #define isc_spb_sec_lastname 12 +/****************************************************** + * Parameters for isc_action_{add|delete|display)_db_alias * + ******************************************************/ + +#define isc_spb_sec_db_alias_name 20 +#define isc_spb_sec_db_alias_dbpath 21 + +/******************************************************* + * Parameters for isc_action_svc_(add|remove)_license, * + * isc_info_svc_get_license * + *******************************************************/ + #define isc_spb_lic_key 5 #define isc_spb_lic_id 6 #define isc_spb_lic_desc 7 -#define isc_spb_bkp_file 5 +/* Parameters for isc_action_svc_properties and isc_action_svc_repair + * share the same namespace; assign values without colliding. + * Options below need to be uniquely identified + * + * Compatible "standalone options" below must be combined together (bit-wise OR), + * and provided as a single value to isc_spb_options + */ +/******************************************** + * Parameters for isc_action_svc_properties * + ********************************************/ + +/* options needing values... */ +#define isc_spb_prp_page_buffers 5 +#define isc_spb_prp_sweep_interval 6 +#define isc_spb_prp_shutdown_db 7 +#define isc_spb_prp_deny_new_attachments 9 +#define isc_spb_prp_deny_new_transactions 10 +#define isc_spb_prp_reserve_space 11 +#define isc_spb_prp_write_mode 12 +#define isc_spb_prp_access_mode 13 +#define isc_spb_prp_set_sql_dialect 14 +#define isc_spb_prp_archive_dumps 42 +#define isc_spb_prp_archive_sweep 43 +/* standalone options for setting property operation... */ +#define isc_spb_prp_activate 0x0100 +#define isc_spb_prp_db_online 0x0200 + +/******************************************** + * Parameters for isc_spb_prp_reserve_space * + ********************************************/ + +#define isc_spb_prp_res_use_full 35 +#define isc_spb_prp_res 36 + +/****************************************** + * Parameters for isc_spb_prp_write_mode * + ******************************************/ + +#define isc_spb_prp_wm_async 37 +#define isc_spb_prp_wm_sync 38 +#define isc_spb_prp_wm_direct 41 + +/****************************************** + * Parameters for isc_spb_prp_access_mode * + ******************************************/ + +#define isc_spb_prp_am_readonly 39 +#define isc_spb_prp_am_readwrite 40 + +/***************************************** + * Parameters for isc_action_svc_repair * + *****************************************/ + +/* options needing values... */ +#define isc_spb_rpr_commit_trans 15 +#define isc_spb_rpr_rollback_trans 34 +#define isc_spb_rpr_recover_two_phase 17 +#define isc_spb_tra_id 18 +#define isc_spb_single_tra_id 19 +#define isc_spb_multi_tra_id 20 +#define isc_spb_tra_state 21 +#define isc_spb_tra_state_limbo 22 +#define isc_spb_tra_state_commit 23 +#define isc_spb_tra_state_rollback 24 +#define isc_spb_tra_state_unknown 25 +#define isc_spb_tra_host_site 26 +#define isc_spb_tra_remote_site 27 +#define isc_spb_tra_db_path 28 +#define isc_spb_tra_advise 29 +#define isc_spb_tra_advise_commit 30 +#define isc_spb_tra_advise_rollback 31 +#define isc_spb_tra_advise_unknown 33 + +/* standalone options for repair operation... */ +#define isc_spb_rpr_validate_db 0x01 +#define isc_spb_rpr_sweep_db 0x02 +#define isc_spb_rpr_mend_db 0x04 +#define isc_spb_rpr_list_limbo_trans 0x08 +#define isc_spb_rpr_check_db 0x10 +#define isc_spb_rpr_ignore_checksum 0x20 +#define isc_spb_rpr_kill_shadows 0x40 +#define isc_spb_rpr_full 0x80 + + +/* Backup, Restore, Dump and Archive operations share a lot of options. + * Options below need to be uniquely identified. + * + * Compatible "standalone options" below must be combined together (bit-wise OR), + * and provided as a single value to isc_spb_options + */ +/***************************************** + * Parameters for isc_action_svc_backup * + *****************************************/ + +/* options needing values... */ +#define isc_spb_bkp_file 5 #define isc_spb_bkp_factor 6 #define isc_spb_bkp_length 7 +#define isc_spb_bkp_preallocate 13 +#define isc_spb_bkp_encrypt_name 14 +/* standalone options for backup operation... */ #define isc_spb_bkp_ignore_checksums 0x01 #define isc_spb_bkp_ignore_limbo 0x02 #define isc_spb_bkp_metadata_only 0x04 @@ -1824,87 +2517,235 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_spb_bkp_old_descriptions 0x10 #define isc_spb_bkp_non_transportable 0x20 #define isc_spb_bkp_convert 0x40 -#define isc_spb_bkp_expand 0x80 +#define isc_spb_bkp_expand 0x80 +/* standalone options for Archive backup operation... */ +#define isc_spb_bkp_archive_database 0x010000 +#define isc_spb_bkp_archive_journals 0x020000 -#define isc_spb_prp_page_buffers 5 -#define isc_spb_prp_sweep_interval 6 -#define isc_spb_prp_shutdown_db 7 -#define isc_spb_prp_deny_new_attachments 9 -#define isc_spb_prp_deny_new_transactions 10 -#define isc_spb_prp_reserve_space 11 -#define isc_spb_prp_write_mode 12 -#define isc_spb_prp_access_mode 13 -#define isc_spb_prp_set_sql_dialect 14 -#define isc_spb_prp_activate 0x0100 -#define isc_spb_prp_db_online 0x0200 +/***************************************** + * Parameters for isc_action_svc_restore * + *****************************************/ -#define isc_spb_prp_res_use_full 35 -#define isc_spb_prp_res 36 +/* options needing values... */ +#define isc_spb_res_buffers 9 +#define isc_spb_res_page_size 10 +#define isc_spb_res_length 11 +#define isc_spb_res_access_mode 12 +#define isc_spb_res_preallocate isc_spb_bkp_preallocate +#define isc_spb_res_decrypt_password 16 +#define isc_spb_res_eua_user_name 17 +#define isc_spb_res_eua_password 18 +#define isc_spb_res_write_mode 19 +#define isc_spb_res_starting_trans 21 /* requires 64bit integer value */ +#define isc_spb_res_ods_version_major 22 +#define isc_spb_res_archive_recover_until 23 +/* standalone options for restore operation... */ +#define isc_spb_res_deactivate_idx 0x0100 +#define isc_spb_res_no_shadow 0x0200 +#define isc_spb_res_no_validity 0x0400 +#define isc_spb_res_one_at_a_time 0x0800 +#define isc_spb_res_replace 0x1000 +#define isc_spb_res_create 0x2000 +#define isc_spb_res_use_all_space 0x4000 +#define isc_spb_res_validate 0x8000 +/* standalone options for Archive recover operation... */ +#define isc_spb_res_archive_recover 0x040000 -#define isc_spb_prp_wm_async 37 -#define isc_spb_prp_wm_sync 38 +/***************************************** + * Parameters for isc_action_svc_dump * + *****************************************/ -#define isc_spb_prp_am_readonly 39 -#define isc_spb_prp_am_readwrite 40 +/* options needing values... */ +#define isc_spb_dmp_file isc_spb_bkp_file +#define isc_spb_dmp_length isc_spb_bkp_length +#define isc_spb_dmp_overwrite 20 /* special case; does not require any values. */ +/* standalone options for dump operation... */ +#define isc_spb_dmp_create 0x080000 -#define isc_spb_rpr_commit_trans 15 -#define isc_spb_rpr_rollback_trans 34 -#define isc_spb_rpr_recover_two_phase 17 -#define isc_spb_tra_id 18 -#define isc_spb_single_tra_id 19 -#define isc_spb_multi_tra_id 20 -#define isc_spb_tra_state 21 -#define isc_spb_tra_state_limbo 22 -#define isc_spb_tra_state_commit 23 -#define isc_spb_tra_state_rollback 24 -#define isc_spb_tra_state_unknown 25 -#define isc_spb_tra_host_site 26 -#define isc_spb_tra_remote_site 27 -#define isc_spb_tra_db_path 28 -#define isc_spb_tra_advise 29 -#define isc_spb_tra_advise_commit 30 -#define isc_spb_tra_advise_rollback 31 -#define isc_spb_tra_advise_unknown 33 +/****************************************** + * Parameters for isc_spb_res_access_mode * + ******************************************/ -#define isc_spb_rpr_validate_db 0x01 -#define isc_spb_rpr_sweep_db 0x02 -#define isc_spb_rpr_mend_db 0x04 -#define isc_spb_rpr_list_limbo_trans 0x08 -#define isc_spb_rpr_check_db 0x10 -#define isc_spb_rpr_ignore_checksum 0x20 -#define isc_spb_rpr_kill_shadows 0x40 -#define isc_spb_rpr_full 0x80 +#define isc_spb_res_am_readonly isc_spb_prp_am_readonly +#define isc_spb_res_am_readwrite isc_spb_prp_am_readwrite -#define isc_spb_res_buffers 9 -#define isc_spb_res_page_size 10 -#define isc_spb_res_length 11 -#define isc_spb_res_access_mode 12 -#define isc_spb_res_deactivate_idx 0x0100 -#define isc_spb_res_no_shadow 0x0200 -#define isc_spb_res_no_validity 0x0400 -#define isc_spb_res_one_at_a_time 0x0800 -#define isc_spb_res_replace 0x1000 -#define isc_spb_res_create 0x2000 -#define isc_spb_res_use_all_space 0x4000 +/****************************************** + * Parameters for isc_spb_res_write_mode * + ******************************************/ -#define isc_spb_res_am_readonly isc_spb_prp_am_readonly -#define isc_spb_res_am_readwrite isc_spb_prp_am_readwrite +#define isc_spb_res_wm_async isc_spb_prp_wm_async +#define isc_spb_res_wm_sync isc_spb_prp_wm_sync +#define isc_spb_res_wm_direct isc_spb_prp_wm_direct -#define isc_spb_num_att 5 -#define isc_spb_num_db 6 +/******************************************* + * Parameters for isc_info_svc_svr_db_info * + *******************************************/ -#define isc_spb_sts_data_pages 0x01 -#define isc_spb_sts_db_log 0x02 -#define isc_spb_sts_hdr_pages 0x04 -#define isc_spb_sts_idx_pages 0x08 -#define isc_spb_sts_sys_relations 0x10 -#define isc_spb_sts_record_versions 0x20 -#define isc_spb_sts_table 0x40 -#define isc_spb_sts_nocreation 0x80 +#define isc_spb_num_att 5 +#define isc_spb_num_db 6 + +/***************************************** + * Parameters for isc_action_svc_db_stats * + *****************************************/ + +#define isc_spb_sts_data_pages 0x01 +#define isc_spb_sts_db_log 0x02 +#define isc_spb_sts_hdr_pages 0x04 +#define isc_spb_sts_idx_pages 0x08 +#define isc_spb_sts_sys_relations 0x10 +#define isc_spb_sts_record_versions 0x20 +#define isc_spb_sts_table 0x40 + +/*************************/ +/* SQL information items */ +/*************************/ + +#define isc_info_sql_select 4 +#define isc_info_sql_bind 5 +#define isc_info_sql_num_variables 6 +#define isc_info_sql_describe_vars 7 +#define isc_info_sql_describe_end 8 +#define isc_info_sql_sqlda_seq 9 +#define isc_info_sql_message_seq 10 +#define isc_info_sql_type 11 +#define isc_info_sql_sub_type 12 +#define isc_info_sql_scale 13 +#define isc_info_sql_length 14 +#define isc_info_sql_null_ind 15 +#define isc_info_sql_field 16 +#define isc_info_sql_relation 17 +#define isc_info_sql_owner 18 +#define isc_info_sql_alias 19 +#define isc_info_sql_sqlda_start 20 +#define isc_info_sql_stmt_type 21 +#define isc_info_sql_get_plan 22 +#define isc_info_sql_records 23 +#define isc_info_sql_batch_fetch 24 +#define isc_info_sql_precision 25 + +/*********************************/ +/* SQL information return values */ +/*********************************/ + +#define isc_info_sql_stmt_select 1 +#define isc_info_sql_stmt_insert 2 +#define isc_info_sql_stmt_update 3 +#define isc_info_sql_stmt_delete 4 +#define isc_info_sql_stmt_ddl 5 +#define isc_info_sql_stmt_get_segment 6 +#define isc_info_sql_stmt_put_segment 7 +#define isc_info_sql_stmt_exec_procedure 8 +#define isc_info_sql_stmt_start_trans 9 +#define isc_info_sql_stmt_commit 10 +#define isc_info_sql_stmt_rollback 11 +#define isc_info_sql_stmt_select_for_upd 12 +#define isc_info_sql_stmt_set_generator 13 +#define isc_info_sql_stmt_set_password 14 +#define isc_info_sql_stmt_set_subscription 15 +#define isc_info_sql_stmt_truncate 16 + +/***********************************/ +/* Server configuration key values */ +/***********************************/ + +#define ISCCFG_LOCKMEM_KEY 0 +#define ISCCFG_LOCKSEM_KEY 1 +#define ISCCFG_LOCKSIG_KEY 2 +#define ISCCFG_EVNTMEM_KEY 3 +#define ISCCFG_DBCACHE_KEY 4 +#define ISCCFG_PRIORITY_KEY 5 +#define ISCCFG_IPCMAP_KEY 6 +#define ISCCFG_MEMMIN_KEY 7 +#define ISCCFG_MEMMAX_KEY 8 +#define ISCCFG_LOCKORDER_KEY 9 +#define ISCCFG_ANYLOCKMEM_KEY 10 +#define ISCCFG_ANYLOCKSEM_KEY 11 +#define ISCCFG_ANYLOCKSIG_KEY 12 +#define ISCCFG_ANYEVNTMEM_KEY 13 +#define ISCCFG_LOCKHASH_KEY 14 +#define ISCCFG_DEADLOCK_KEY 15 +#define ISCCFG_LOCKSPIN_KEY 16 +#define ISCCFG_CONN_TIMEOUT_KEY 17 +#define ISCCFG_DUMMY_INTRVL_KEY 18 +#define ISCCFG_TRACE_POOLS_KEY 19 /* Internal Use only */ +#define ISCCFG_REMOTE_BUFFER_KEY 20 +#define ISCCFG_CPU_AFFINITY_KEY 21 +#define ISCCFG_SWEEP_QUANTUM_KEY 22 +#define ISCCFG_USER_QUANTUM_KEY 23 +#define ISCCFG_SLEEP_TIME_KEY 24 +#define ISCCFG_MAX_THREADS_KEY 25 +#define ISCCFG_ADMIN_DB_KEY 26 +#define ISCCFG_USE_SANCTUARY_KEY 27 +#define ISCCFG_ENABLE_HT_KEY 28 +#define ISCCFG_USE_ROUTER_KEY 29 +#define ISCCFG_SORTMEM_BUFFER_SIZE_KEY 30 +#define ISCCFG_SQL_CMP_RECURSION_KEY 31 +#define ISCCFG_SOL_BOUND_THREADS_KEY 32 +#define ISCCFG_SOL_SYNC_SCOPE_KEY 33 +#define ISCCFG_IDX_RECNUM_MARKER_KEY 34 +#define ISCCFG_IDX_GARBAGE_COLLECTION_KEY 35 +#define ISCCFG_WIN_LOCAL_CONNECT_RETRIES_KEY 36 +#define ISCCFG_EXPAND_MOUNTPOINT_KEY 37 +#define ISCCFG_LOOPBACK_CONNECTION_KEY 38 +#define ISCCFG_THREAD_STACK_SIZE_KEY 39 +#define ISCCFG_MAX_DB_VIRMEM_USE_KEY 40 +#define ISCCFG_MAX_ASSISTANTS_KEY 41 +#define ISCCFG_APPDATA_DIR_KEY 42 +#define ISCCFG_MEMORY_RECLAMATION_KEY 43 +#define ISCCFG_PAGE_CACHE_EXPANSION_KEY 44 +#define ISCCFG_STARTING_TRANSACTION_ID_KEY 45 /* Used internally to test 64-bit transaction ID */ +#define ISCCFG_DATABASE_ODS_VERSION_KEY 46 /* Used internally to test creating databases with older ODS versions */ +#define ISCCFG_HOSTLIC_IMPORT_DIR_KEY 47 +#define ISCCFG_HOSTLIC_INFO_DIR_KEY 48 + + +/***************/ +/* Error codes */ +/***************/ + +#define isc_facility 20 +/* END CONVERT TAG */ +/* START CONVERT TAG Define as long */ +#define isc_err_base 335544320L +/* END CONVERT TAG */ +/* START CONVERT TAG */ +#define isc_err_factor 1 +#define isc_arg_end 0 +#define isc_arg_gds 1 +#define isc_arg_string 2 +#define isc_arg_cstring 3 +#define isc_arg_number 4 +#define isc_arg_interpreted 5 +#define isc_arg_vms 6 +#define isc_arg_unix 7 +#define isc_arg_domain 8 +#define isc_arg_dos 9 +#define isc_arg_mpexl 10 +#define isc_arg_mpexl_ipc 11 +#define isc_arg_next_mach 15 +#define isc_arg_netware 16 +#define isc_arg_win32 17 +#define isc_arg_warning 18 +#define isc_arg_sql 19 +#define isc_arg_int64 20 + +#include + +/**********************************************/ +/* Dynamic Data Definition Language operators */ +/**********************************************/ + +/******************/ +/* Version number */ +/******************/ #define isc_dyn_version_1 1 #define isc_dyn_eoc 255 +/******************************/ +/* Operations (may be nested) */ +/******************************/ + #define isc_dyn_begin 2 #define isc_dyn_end 3 #define isc_dyn_if 4 @@ -1925,16 +2766,26 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dyn_def_shadow 34 #define isc_dyn_def_trigger_msg 17 #define isc_dyn_def_file 36 +#define isc_dyn_def_user 225 +#define isc_dyn_def_journal 203 +#define isc_dyn_def_archive 206 +#define isc_dyn_def_encryption 150 +#define isc_dyn_def_subscription 160 +#define isc_dyn_set_subscription 161 #define isc_dyn_mod_database 39 #define isc_dyn_mod_rel 11 #define isc_dyn_mod_global_fld 13 #define isc_dyn_mod_idx 102 #define isc_dyn_mod_local_fld 14 -#define isc_dyn_mod_sql_fld 216 +#define isc_dyn_mod_sql_fld 216 #define isc_dyn_mod_view 16 #define isc_dyn_mod_security_class 122 #define isc_dyn_mod_trigger 113 #define isc_dyn_mod_trigger_msg 28 +#define isc_dyn_mod_user 226 +#define isc_dyn_mod_journal 204 +#define isc_dyn_mod_archive 207 +#define isc_dyn_mod_encryption 151 #define isc_dyn_delete_database 18 #define isc_dyn_delete_rel 19 #define isc_dyn_delete_global_fld 20 @@ -1946,7 +2797,13 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dyn_delete_trigger_msg 29 #define isc_dyn_delete_filter 32 #define isc_dyn_delete_function 33 +#define isc_dyn_delete_generator 217 #define isc_dyn_delete_shadow 35 +#define isc_dyn_delete_user 227 +#define isc_dyn_delete_journal 205 +#define isc_dyn_delete_archive 208 +#define isc_dyn_delete_encryption 152 +#define isc_dyn_delete_subscription 172 #define isc_dyn_grant 30 #define isc_dyn_revoke 31 #define isc_dyn_def_primary_key 37 @@ -1957,16 +2814,17 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dyn_def_parameter 135 #define isc_dyn_delete_parameter 136 #define isc_dyn_mod_procedure 175 - +#define isc_dyn_def_log_file 176 #define isc_dyn_def_exception 181 #define isc_dyn_mod_exception 182 #define isc_dyn_del_exception 183 +#define isc_dyn_def_default_log 202 +#define isc_dyn_sys_encrypt_passwd 200 +#define isc_dyn_set_password 201 -#define isc_dyn_def_difference 220 -#define isc_dyn_drop_difference 221 -#define isc_dyn_begin_backup 222 -#define isc_dyn_end_backup 223 -#define isc_dyn_debug_info 240 +/***********************/ +/* View specific stuff */ +/***********************/ #define isc_dyn_view_blr 43 #define isc_dyn_view_source 44 @@ -1974,18 +2832,30 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dyn_view_context 46 #define isc_dyn_view_context_name 47 +/**********************/ +/* Generic attributes */ +/**********************/ + #define isc_dyn_rel_name 50 #define isc_dyn_fld_name 51 -#define isc_dyn_new_fld_name 215 +#define isc_dyn_new_fld_name 215 #define isc_dyn_idx_name 52 #define isc_dyn_description 53 #define isc_dyn_security_class 54 #define isc_dyn_system_flag 55 #define isc_dyn_update_flag 56 +#define isc_dyn_enc_name 57 +#define isc_dyn_sub_name 162 #define isc_dyn_prc_name 166 #define isc_dyn_prm_name 137 #define isc_dyn_sql_object 196 #define isc_dyn_fld_character_set_name 174 +#define isc_dyn_reserve_space 195 +#define isc_dyn_restrict_or_cascade 220 + +/********************************/ +/* Relation specific attributes */ +/********************************/ #define isc_dyn_rel_dbkey_length 61 #define isc_dyn_rel_store_trig 62 @@ -1998,10 +2868,12 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dyn_rel_sql_protection 69 #define isc_dyn_rel_constraint 162 #define isc_dyn_delete_rel_constraint 163 +#define isc_dyn_rel_sql_scope 218 +#define isc_dyn_rel_sql_on_commit 219 -#define isc_dyn_rel_temporary 238 -#define isc_dyn_rel_temp_global_preserve 1 -#define isc_dyn_rel_temp_global_delete 2 +/************************************/ +/* Global field specific attributes */ +/************************************/ #define isc_dyn_fld_type 70 #define isc_dyn_fld_length 71 @@ -2026,19 +2898,36 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dyn_del_default 197 #define isc_dyn_del_validation 198 #define isc_dyn_single_validation 199 +#define isc_dyn_fld_encrypt 200 +#define isc_dyn_fld_decrypt_dflt_value 201 +#define isc_dyn_fld_decrypt_dflt_source 202 #define isc_dyn_fld_character_set 203 +/***********************************/ +/* Local field specific attributes */ +/***********************************/ + +#define isc_dyn_fld_derived 89 #define isc_dyn_fld_source 90 #define isc_dyn_fld_base_fld 91 #define isc_dyn_fld_position 92 #define isc_dyn_fld_update_flag 93 +#define isc_dyn_fld_all 94 + +/*****************************/ +/* Index specific attributes */ +/*****************************/ #define isc_dyn_idx_unique 100 #define isc_dyn_idx_inactive 101 #define isc_dyn_idx_type 103 #define isc_dyn_idx_foreign_key 104 #define isc_dyn_idx_ref_column 105 -#define isc_dyn_idx_statistic 204 +#define isc_dyn_idx_statistic 204 + +/*******************************/ +/* Trigger specific attributes */ +/*******************************/ #define isc_dyn_trg_type 110 #define isc_dyn_trg_blr 111 @@ -2049,25 +2938,61 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dyn_trg_msg_number 117 #define isc_dyn_trg_msg 118 +/**************************************/ +/* Security Class specific attributes */ +/**************************************/ + #define isc_dyn_scl_acl 121 #define isc_dyn_grant_user 130 -#define isc_dyn_grant_user_explicit 219 #define isc_dyn_grant_proc 186 #define isc_dyn_grant_trig 187 #define isc_dyn_grant_view 188 #define isc_dyn_grant_options 132 #define isc_dyn_grant_user_group 205 -#define isc_dyn_grant_role 218 + + +/**********************************/ +/* Dimension specific information */ +/**********************************/ #define isc_dyn_dim_lower 141 #define isc_dyn_dim_upper 142 +/****************************/ +/* File specific attributes */ +/****************************/ + #define isc_dyn_file_name 125 #define isc_dyn_file_start 126 #define isc_dyn_file_length 127 #define isc_dyn_shadow_number 128 #define isc_dyn_shadow_man_auto 129 #define isc_dyn_shadow_conditional 130 +#define isc_dyn_file_prealloc 131 + +/********************************/ +/* Log file specific attributes */ +/********************************/ + +#define isc_dyn_log_file_sequence 177 +#define isc_dyn_log_file_partitions 178 +#define isc_dyn_log_file_serial 179 +#define isc_dyn_log_file_directory 200 +#define isc_dyn_log_file_raw 201 + +/***************************/ +/* Log specific attributes */ +/***************************/ + +#define isc_dyn_log_check_point_interval 189 +#define isc_dyn_log_buffer_size 190 +#define isc_dyn_log_check_point_length 191 +#define isc_dyn_log_num_of_buffers 192 +#define isc_dyn_log_timestamp_name 193 + +/********************************/ +/* Function specific attributes */ +/********************************/ #define isc_dyn_function_name 145 #define isc_dyn_function_type 146 @@ -2079,35 +3004,64 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dyn_filter_in_subtype 152 #define isc_dyn_filter_out_subtype 153 -#define isc_dyn_description2 154 -#define isc_dyn_fld_computed_source2 155 -#define isc_dyn_fld_edit_string2 156 -#define isc_dyn_fld_query_header2 157 -#define isc_dyn_fld_validation_source2 158 -#define isc_dyn_trg_msg2 159 -#define isc_dyn_trg_source2 160 -#define isc_dyn_view_source2 161 -#define isc_dyn_xcp_msg2 184 + +#define isc_dyn_description2 154 +#define isc_dyn_fld_computed_source2 155 +#define isc_dyn_fld_edit_string2 156 +#define isc_dyn_fld_query_header2 157 +#define isc_dyn_fld_validation_source2 158 +#define isc_dyn_trg_msg2 159 +#define isc_dyn_trg_source2 160 +#define isc_dyn_view_source2 161 +#define isc_dyn_xcp_msg2 184 + +/*********************************/ +/* Generator specific attributes */ +/*********************************/ #define isc_dyn_generator_name 95 #define isc_dyn_generator_id 96 +/*********************************/ +/* Procedure specific attributes */ +/*********************************/ + #define isc_dyn_prc_inputs 167 #define isc_dyn_prc_outputs 168 #define isc_dyn_prc_source 169 #define isc_dyn_prc_blr 170 #define isc_dyn_prc_source2 171 -#define isc_dyn_prc_type 239 -#define isc_dyn_prc_t_selectable 1 -#define isc_dyn_prc_t_executable 2 +/*********************************/ +/* Parameter specific attributes */ +/*********************************/ #define isc_dyn_prm_number 138 #define isc_dyn_prm_type 139 -#define isc_dyn_prm_mechanism 241 + +/********************************/ +/* Relation specific attributes */ +/********************************/ #define isc_dyn_xcp_msg 185 +/********************************/ +/* Subscription specific attributes */ +/********************************/ + +#define isc_dyn_change_type 163 +#define isc_dyn_insert 165 +#define isc_dyn_update 166 +#define isc_dyn_delete 167 +#define isc_dyn_change 168 +#define isc_dyn_sub_active 169 +#define isc_dyn_sub_inactive 170 +#define isc_dyn_sub_dest 171 +#define isc_dyn_sub_rel_counter 172 + +/**********************************************/ +/* Cascading referential integrity values */ +/**********************************************/ #define isc_dyn_foreign_key_update 205 #define isc_dyn_foreign_key_delete 206 #define isc_dyn_foreign_key_cascade 207 @@ -2115,31 +3069,76 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_dyn_foreign_key_null 209 #define isc_dyn_foreign_key_none 210 +/***********************/ +/* SQL role values */ +/***********************/ #define isc_dyn_def_sql_role 211 #define isc_dyn_sql_role_name 212 #define isc_dyn_grant_admin_options 213 #define isc_dyn_del_sql_role 214 -#define isc_dyn_delete_generator 217 +/***********************/ +/* ADMIN OPTION values */ +/***********************/ +#define isc_dyn_add_admin 221 +#define isc_dyn_drop_admin 222 +#define isc_dyn_admin_active 223 +#define isc_dyn_admin_inactive 224 -#define isc_dyn_mod_function 224 -#define isc_dyn_mod_filter 225 -#define isc_dyn_mod_generator 226 -#define isc_dyn_mod_sql_role 227 -#define isc_dyn_mod_charset 228 -#define isc_dyn_mod_collation 229 -#define isc_dyn_mod_prc_parameter 230 +/****************************/ +/* User specific attributes */ +/****************************/ +#define isc_dyn_user_sys_name 11 +#define isc_dyn_user_grp_name 12 +#define isc_dyn_user_uid 13 +#define isc_dyn_user_gid 14 +#define isc_dyn_user_password 15 +#define isc_dyn_user_active 16 +#define isc_dyn_user_inactive 17 +#define isc_dyn_user_description 18 +#define isc_dyn_user_first_name 19 +#define isc_dyn_user_middle_name 20 +#define isc_dyn_user_last_name 21 +#define isc_dyn_user_default_role 22 -#define isc_dyn_def_collation 231 -#define isc_dyn_coll_for_charset 232 -#define isc_dyn_coll_from 233 -#define isc_dyn_coll_from_external 239 -#define isc_dyn_coll_attribute 234 -#define isc_dyn_coll_specific_attributes_charset 235 -#define isc_dyn_coll_specific_attributes 236 -#define isc_dyn_del_collation 237 +/****************************/ +/* Database specific attributes */ +/****************************/ +#define isc_dyn_db_passwd_digest 37 +#define isc_dyn_db_page_all_checksum 38 +#define isc_dyn_db_page_enc_checksum 39 +#define isc_dyn_db_page_off_checksum 40 +#define isc_dyn_db_page_cache 41 +#define isc_dyn_db_proc_cache 42 +#define isc_dyn_db_rel_cache 43 +#define isc_dyn_db_trig_cache 44 +#define isc_dyn_db_flush_int 45 +#define isc_dyn_db_linger_int 46 +#define isc_dyn_db_reclaim_int 47 +#define isc_dyn_db_sweep_int 48 +#define isc_dyn_db_group_commit 49 -#define isc_dyn_last_dyn_value 242 +/****************************/ +/* Encryption specific attributes */ +/****************************/ +#define isc_dyn_enc_default 50 +#define isc_dyn_enc_cipher 51 +#define isc_dyn_enc_length 52 +#define isc_dyn_enc_password 54 +#define isc_dyn_enc_init_vector 55 +#define isc_dyn_enc_pad 56 +#define isc_dyn_encrypt 57 +#define isc_dyn_decrypt 58 + +/****************************/ +/* Last $dyn value assigned */ +/****************************/ + +#define isc_dyn_last_dyn_value 227 + +/******************************************/ +/* Array slice description language (SDL) */ +/******************************************/ #define isc_sdl_version1 1 #define isc_sdl_eoc 255 @@ -2179,371 +3178,68 @@ int ISC_EXPORT isc_get_client_minor_version (); #define isc_sdl_do1 35 #define isc_sdl_element 36 +/********************************************/ +/* International text interpretation values */ +/********************************************/ + #define isc_interp_eng_ascii 0 #define isc_interp_jpn_sjis 5 #define isc_interp_jpn_euc 6 -#define isc_blob_untyped 0 +/*******************/ +/* SQL definitions */ +/*******************/ -#define isc_blob_text 1 -#define isc_blob_blr 2 -#define isc_blob_acl 3 -#define isc_blob_ranges 4 -#define isc_blob_summary 5 -#define isc_blob_format 6 -#define isc_blob_tra 7 -#define isc_blob_extfile 8 -#define isc_blob_debug_info 9 -#define isc_blob_max_predefined_subtype 10 +#define SQL_TEXT 452 +#define SQL_VARYING 448 +#define SQL_SHORT 500 +#define SQL_LONG 496 +#define SQL_FLOAT 482 +#define SQL_DOUBLE 480 +#define SQL_D_FLOAT 530 +#define SQL_TIMESTAMP 510 +#define SQL_BLOB 520 +#define SQL_ARRAY 540 +#define SQL_QUAD 550 +#define SQL_TYPE_TIME 560 +#define SQL_TYPE_DATE 570 +#define SQL_INT64 580 +#define SQL_BOOLEAN 590 -#define isc_blob_formatted_memo 20 -#define isc_blob_paradox_ole 21 -#define isc_blob_graphic 22 -#define isc_blob_dbase_ole 23 -#define isc_blob_typed_binary 24 +/* Historical alias for pre V6 applications */ +#define SQL_DATE SQL_TIMESTAMP + +/*****************/ +/* Blob Subtypes */ +/*****************/ + +/* types less than zero are reserved for customer use */ + +#define isc_blob_untyped 0 + +/* internal subtypes */ + +#define isc_blob_text 1 +#define isc_blob_blr 2 +#define isc_blob_acl 3 +#define isc_blob_ranges 4 +#define isc_blob_summary 5 +#define isc_blob_format 6 +#define isc_blob_tra 7 +#define isc_blob_extfile 8 + +/* the range 20-30 is reserved for dBASE and Paradox types */ + +#define isc_blob_formatted_memo 20 +#define isc_blob_paradox_ole 21 +#define isc_blob_graphic 22 +#define isc_blob_dbase_ole 23 +#define isc_blob_typed_binary 24 + +/* Deprecated definitions maintained for compatibility only */ #define isc_info_db_SQL_dialect 62 #define isc_dpb_SQL_dialect 63 #define isc_dpb_set_db_SQL_dialect 65 - -#define fb_dbg_version 1 -#define fb_dbg_end 255 -#define fb_dbg_map_src2blr 2 -#define fb_dbg_map_varname 3 -#define fb_dbg_map_argument 4 - -#define fb_dbg_arg_input 0 -#define fb_dbg_arg_output 1 - -#endif - -/*********************************/ -/* Information call declarations */ -/*********************************/ - - -#ifndef JRD_INF_PUB_H -#define JRD_INF_PUB_H - -#define isc_info_end 1 -#define isc_info_truncated 2 -#define isc_info_error 3 -#define isc_info_data_not_ready 4 -#define isc_info_length 126 -#define isc_info_flag_end 127 - -enum db_info_types -{ - isc_info_db_id = 4, - isc_info_reads = 5, - isc_info_writes = 6, - isc_info_fetches = 7, - isc_info_marks = 8, - - isc_info_implementation = 11, - isc_info_isc_version = 12, - isc_info_base_level = 13, - isc_info_page_size = 14, - isc_info_num_buffers = 15, - isc_info_limbo = 16, - isc_info_current_memory = 17, - isc_info_max_memory = 18, - isc_info_window_turns = 19, - isc_info_license = 20, - - isc_info_allocation = 21, - isc_info_attachment_id = 22, - isc_info_read_seq_count = 23, - isc_info_read_idx_count = 24, - isc_info_insert_count = 25, - isc_info_update_count = 26, - isc_info_delete_count = 27, - isc_info_backout_count = 28, - isc_info_purge_count = 29, - isc_info_expunge_count = 30, - - isc_info_sweep_interval = 31, - isc_info_ods_version = 32, - isc_info_ods_minor_version = 33, - isc_info_no_reserve = 34, - - isc_info_logfile = 35, - isc_info_cur_logfile_name = 36, - isc_info_cur_log_part_offset = 37, - isc_info_num_wal_buffers = 38, - isc_info_wal_buffer_size = 39, - isc_info_wal_ckpt_length = 40, - - isc_info_wal_cur_ckpt_interval = 41, - isc_info_wal_prv_ckpt_fname = 42, - isc_info_wal_prv_ckpt_poffset = 43, - isc_info_wal_recv_ckpt_fname = 44, - isc_info_wal_recv_ckpt_poffset = 45, - isc_info_wal_grpc_wait_usecs = 47, - isc_info_wal_num_io = 48, - isc_info_wal_avg_io_size = 49, - isc_info_wal_num_commits = 50, - isc_info_wal_avg_grpc_size = 51, - - isc_info_forced_writes = 52, - isc_info_user_names = 53, - isc_info_page_errors = 54, - isc_info_record_errors = 55, - isc_info_bpage_errors = 56, - isc_info_dpage_errors = 57, - isc_info_ipage_errors = 58, - isc_info_ppage_errors = 59, - isc_info_tpage_errors = 60, - - isc_info_set_page_buffers = 61, - isc_info_db_sql_dialect = 62, - isc_info_db_read_only = 63, - isc_info_db_size_in_pages = 64, - - frb_info_att_charset = 101, - isc_info_db_class = 102, - isc_info_firebird_version = 103, - isc_info_oldest_transaction = 104, - isc_info_oldest_active = 105, - isc_info_oldest_snapshot = 106, - isc_info_next_transaction = 107, - isc_info_db_provider = 108, - isc_info_active_transactions = 109, - isc_info_active_tran_count = 110, - isc_info_creation_date = 111, - isc_info_db_file_size = 112, - - isc_info_db_last_value -}; - -#define isc_info_version isc_info_isc_version - -enum info_db_implementations -{ - isc_info_db_impl_rdb_vms = 1, - isc_info_db_impl_rdb_eln = 2, - isc_info_db_impl_rdb_eln_dev = 3, - isc_info_db_impl_rdb_vms_y = 4, - isc_info_db_impl_rdb_eln_y = 5, - isc_info_db_impl_jri = 6, - isc_info_db_impl_jsv = 7, - - isc_info_db_impl_isc_apl_68K = 25, - isc_info_db_impl_isc_vax_ultr = 26, - isc_info_db_impl_isc_vms = 27, - isc_info_db_impl_isc_sun_68k = 28, - isc_info_db_impl_isc_os2 = 29, - isc_info_db_impl_isc_sun4 = 30, - - isc_info_db_impl_isc_hp_ux = 31, - isc_info_db_impl_isc_sun_386i = 32, - isc_info_db_impl_isc_vms_orcl = 33, - isc_info_db_impl_isc_mac_aux = 34, - isc_info_db_impl_isc_rt_aix = 35, - isc_info_db_impl_isc_mips_ult = 36, - isc_info_db_impl_isc_xenix = 37, - isc_info_db_impl_isc_dg = 38, - isc_info_db_impl_isc_hp_mpexl = 39, - isc_info_db_impl_isc_hp_ux68K = 40, - - isc_info_db_impl_isc_sgi = 41, - isc_info_db_impl_isc_sco_unix = 42, - isc_info_db_impl_isc_cray = 43, - isc_info_db_impl_isc_imp = 44, - isc_info_db_impl_isc_delta = 45, - isc_info_db_impl_isc_next = 46, - isc_info_db_impl_isc_dos = 47, - isc_info_db_impl_m88K = 48, - isc_info_db_impl_unixware = 49, - isc_info_db_impl_isc_winnt_x86 = 50, - - isc_info_db_impl_isc_epson = 51, - isc_info_db_impl_alpha_osf = 52, - isc_info_db_impl_alpha_vms = 53, - isc_info_db_impl_netware_386 = 54, - isc_info_db_impl_win_only = 55, - isc_info_db_impl_ncr_3000 = 56, - isc_info_db_impl_winnt_ppc = 57, - isc_info_db_impl_dg_x86 = 58, - isc_info_db_impl_sco_ev = 59, - isc_info_db_impl_i386 = 60, - - isc_info_db_impl_freebsd = 61, - isc_info_db_impl_netbsd = 62, - isc_info_db_impl_darwin_ppc = 63, - isc_info_db_impl_sinixz = 64, - - isc_info_db_impl_linux_sparc = 65, - isc_info_db_impl_linux_amd64 = 66, - - isc_info_db_impl_freebsd_amd64 = 67, - - isc_info_db_impl_winnt_amd64 = 68, - - isc_info_db_impl_linux_ppc = 69, - isc_info_db_impl_darwin_x86 = 70, - isc_info_db_impl_linux_mipsel = 71, - isc_info_db_impl_linux_mips = 72, - isc_info_db_impl_darwin_x64 = 73, - - isc_info_db_impl_last_value -}; - -#define isc_info_db_impl_isc_a isc_info_db_impl_isc_apl_68K -#define isc_info_db_impl_isc_u isc_info_db_impl_isc_vax_ultr -#define isc_info_db_impl_isc_v isc_info_db_impl_isc_vms -#define isc_info_db_impl_isc_s isc_info_db_impl_isc_sun_68k - -enum info_db_class -{ - isc_info_db_class_access = 1, - isc_info_db_class_y_valve = 2, - isc_info_db_class_rem_int = 3, - isc_info_db_class_rem_srvr = 4, - isc_info_db_class_pipe_int = 7, - isc_info_db_class_pipe_srvr = 8, - isc_info_db_class_sam_int = 9, - isc_info_db_class_sam_srvr = 10, - isc_info_db_class_gateway = 11, - isc_info_db_class_cache = 12, - isc_info_db_class_classic_access = 13, - isc_info_db_class_server_access = 14, - - isc_info_db_class_last_value -}; - -enum info_db_provider -{ - isc_info_db_code_rdb_eln = 1, - isc_info_db_code_rdb_vms = 2, - isc_info_db_code_interbase = 3, - isc_info_db_code_firebird = 4, - - isc_info_db_code_last_value -}; - -#define isc_info_number_messages 4 -#define isc_info_max_message 5 -#define isc_info_max_send 6 -#define isc_info_max_receive 7 -#define isc_info_state 8 -#define isc_info_message_number 9 -#define isc_info_message_size 10 -#define isc_info_request_cost 11 -#define isc_info_access_path 12 -#define isc_info_req_select_count 13 -#define isc_info_req_insert_count 14 -#define isc_info_req_update_count 15 -#define isc_info_req_delete_count 16 - -#define isc_info_rsb_end 0 -#define isc_info_rsb_begin 1 -#define isc_info_rsb_type 2 -#define isc_info_rsb_relation 3 -#define isc_info_rsb_plan 4 - -#define isc_info_rsb_unknown 1 -#define isc_info_rsb_indexed 2 -#define isc_info_rsb_navigate 3 -#define isc_info_rsb_sequential 4 -#define isc_info_rsb_cross 5 -#define isc_info_rsb_sort 6 -#define isc_info_rsb_first 7 -#define isc_info_rsb_boolean 8 -#define isc_info_rsb_union 9 -#define isc_info_rsb_aggregate 10 -#define isc_info_rsb_merge 11 -#define isc_info_rsb_ext_sequential 12 -#define isc_info_rsb_ext_indexed 13 -#define isc_info_rsb_ext_dbkey 14 -#define isc_info_rsb_left_cross 15 -#define isc_info_rsb_select 16 -#define isc_info_rsb_sql_join 17 -#define isc_info_rsb_simulate 18 -#define isc_info_rsb_sim_cross 19 -#define isc_info_rsb_once 20 -#define isc_info_rsb_procedure 21 -#define isc_info_rsb_skip 22 -#define isc_info_rsb_virt_sequential 23 -#define isc_info_rsb_recursive 24 - -#define isc_info_rsb_and 1 -#define isc_info_rsb_or 2 -#define isc_info_rsb_dbkey 3 -#define isc_info_rsb_index 4 - -#define isc_info_req_active 2 -#define isc_info_req_inactive 3 -#define isc_info_req_send 4 -#define isc_info_req_receive 5 -#define isc_info_req_select 6 -#define isc_info_req_sql_stall 7 - -#define isc_info_blob_num_segments 4 -#define isc_info_blob_max_segment 5 -#define isc_info_blob_total_length 6 -#define isc_info_blob_type 7 - -#define isc_info_tra_id 4 -#define isc_info_tra_oldest_interesting 5 -#define isc_info_tra_oldest_snapshot 6 -#define isc_info_tra_oldest_active 7 -#define isc_info_tra_isolation 8 -#define isc_info_tra_access 9 -#define isc_info_tra_lock_timeout 10 - -#define isc_info_tra_consistency 1 -#define isc_info_tra_concurrency 2 -#define isc_info_tra_read_committed 3 - -#define isc_info_tra_no_rec_version 0 -#define isc_info_tra_rec_version 1 - -#define isc_info_tra_readonly 0 -#define isc_info_tra_readwrite 1 - -#define isc_info_sql_select 4 -#define isc_info_sql_bind 5 -#define isc_info_sql_num_variables 6 -#define isc_info_sql_describe_vars 7 -#define isc_info_sql_describe_end 8 -#define isc_info_sql_sqlda_seq 9 -#define isc_info_sql_message_seq 10 -#define isc_info_sql_type 11 -#define isc_info_sql_sub_type 12 -#define isc_info_sql_scale 13 -#define isc_info_sql_length 14 -#define isc_info_sql_null_ind 15 -#define isc_info_sql_field 16 -#define isc_info_sql_relation 17 -#define isc_info_sql_owner 18 -#define isc_info_sql_alias 19 -#define isc_info_sql_sqlda_start 20 -#define isc_info_sql_stmt_type 21 -#define isc_info_sql_get_plan 22 -#define isc_info_sql_records 23 -#define isc_info_sql_batch_fetch 24 -#define isc_info_sql_relation_alias 25 - -#define isc_info_sql_stmt_select 1 -#define isc_info_sql_stmt_insert 2 -#define isc_info_sql_stmt_update 3 -#define isc_info_sql_stmt_delete 4 -#define isc_info_sql_stmt_ddl 5 -#define isc_info_sql_stmt_get_segment 6 -#define isc_info_sql_stmt_put_segment 7 -#define isc_info_sql_stmt_exec_procedure 8 -#define isc_info_sql_stmt_start_trans 9 -#define isc_info_sql_stmt_commit 10 -#define isc_info_sql_stmt_rollback 11 -#define isc_info_sql_stmt_select_for_upd 12 -#define isc_info_sql_stmt_set_generator 13 -#define isc_info_sql_stmt_savepoint 14 - -#endif - - -#include "iberror.h" - -#endif /* JRD_IBASE_H */ - +/* END CONVERT TAG */ +#endif /* _JRD_IBASE_H_ */ diff --git a/libraries/SQLAPI/include/ibase/iberror.h b/libraries/SQLAPI/include/ibase/iberror.h index 80770ffc5..4c0077eda 100644 --- a/libraries/SQLAPI/include/ibase/iberror.h +++ b/libraries/SQLAPI/include/ibase/iberror.h @@ -1,911 +1,20 @@ - -#ifndef JRD_GEN_IBERROR_H -#define JRD_GEN_IBERROR_H -/* - * The contents of this file are subject to the Interbase Public - * License Version 1.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy - * of the License at http://www.Inprise.com/IPL.html - * - * Software distributed under the License is distributed on an - * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express - * or implied. See the License for the specific language governing - * rights and limitations under the License. - * - * The content of this file was generated by the Firebird project - * using the program jrd/codes.epp - */ -/* - * - * *** WARNING *** - This file is automatically generated by codes.epp - do not edit! - * - */ /* * MODULE: iberror.h * DESCRIPTION: ISC error codes * */ +/* + * Copyright (C) 1986-2010 Embarcadero Technologies Inc. + * All Rights Reserved. + */ +/* START CONVERT TAG Define as public long */ /***********************/ /* ISC Error Codes */ /***********************/ - -#ifdef __cplusplus /* c++ definitions */ - -const ISC_LONG isc_facility = 20; -const ISC_LONG isc_base = 335544320L; -const ISC_LONG isc_factor = 1; -const ISC_LONG isc_arg_end = 0; // end of argument list -const ISC_LONG isc_arg_gds = 1; // generic DSRI status value -const ISC_LONG isc_arg_string = 2; // string argument -const ISC_LONG isc_arg_cstring = 3; // count & string argument -const ISC_LONG isc_arg_number = 4; // numeric argument (long) -const ISC_LONG isc_arg_interpreted = 5; // interpreted status code (string) -const ISC_LONG isc_arg_vms = 6; // VAX/VMS status code (long) -const ISC_LONG isc_arg_unix = 7; // UNIX error code -const ISC_LONG isc_arg_domain = 8; // Apollo/Domain error code -const ISC_LONG isc_arg_dos = 9; // MSDOS/OS2 error code -const ISC_LONG isc_arg_mpexl = 10; // HP MPE/XL error code -const ISC_LONG isc_arg_mpexl_ipc = 11; // HP MPE/XL IPC error code -const ISC_LONG isc_arg_next_mach = 15; // NeXT/Mach error code -const ISC_LONG isc_arg_netware = 16; // NetWare error code -const ISC_LONG isc_arg_win32 = 17; // Win32 error code -const ISC_LONG isc_arg_warning = 18; // warning argument - -const ISC_LONG isc_arith_except = 335544321L; -const ISC_LONG isc_bad_dbkey = 335544322L; -const ISC_LONG isc_bad_db_format = 335544323L; -const ISC_LONG isc_bad_db_handle = 335544324L; -const ISC_LONG isc_bad_dpb_content = 335544325L; -const ISC_LONG isc_bad_dpb_form = 335544326L; -const ISC_LONG isc_bad_req_handle = 335544327L; -const ISC_LONG isc_bad_segstr_handle = 335544328L; -const ISC_LONG isc_bad_segstr_id = 335544329L; -const ISC_LONG isc_bad_tpb_content = 335544330L; -const ISC_LONG isc_bad_tpb_form = 335544331L; -const ISC_LONG isc_bad_trans_handle = 335544332L; -const ISC_LONG isc_bug_check = 335544333L; -const ISC_LONG isc_convert_error = 335544334L; -const ISC_LONG isc_db_corrupt = 335544335L; -const ISC_LONG isc_deadlock = 335544336L; -const ISC_LONG isc_excess_trans = 335544337L; -const ISC_LONG isc_from_no_match = 335544338L; -const ISC_LONG isc_infinap = 335544339L; -const ISC_LONG isc_infona = 335544340L; -const ISC_LONG isc_infunk = 335544341L; -const ISC_LONG isc_integ_fail = 335544342L; -const ISC_LONG isc_invalid_blr = 335544343L; -const ISC_LONG isc_io_error = 335544344L; -const ISC_LONG isc_lock_conflict = 335544345L; -const ISC_LONG isc_metadata_corrupt = 335544346L; -const ISC_LONG isc_not_valid = 335544347L; -const ISC_LONG isc_no_cur_rec = 335544348L; -const ISC_LONG isc_no_dup = 335544349L; -const ISC_LONG isc_no_finish = 335544350L; -const ISC_LONG isc_no_meta_update = 335544351L; -const ISC_LONG isc_no_priv = 335544352L; -const ISC_LONG isc_no_recon = 335544353L; -const ISC_LONG isc_no_record = 335544354L; -const ISC_LONG isc_no_segstr_close = 335544355L; -const ISC_LONG isc_obsolete_metadata = 335544356L; -const ISC_LONG isc_open_trans = 335544357L; -const ISC_LONG isc_port_len = 335544358L; -const ISC_LONG isc_read_only_field = 335544359L; -const ISC_LONG isc_read_only_rel = 335544360L; -const ISC_LONG isc_read_only_trans = 335544361L; -const ISC_LONG isc_read_only_view = 335544362L; -const ISC_LONG isc_req_no_trans = 335544363L; -const ISC_LONG isc_req_sync = 335544364L; -const ISC_LONG isc_req_wrong_db = 335544365L; -const ISC_LONG isc_segment = 335544366L; -const ISC_LONG isc_segstr_eof = 335544367L; -const ISC_LONG isc_segstr_no_op = 335544368L; -const ISC_LONG isc_segstr_no_read = 335544369L; -const ISC_LONG isc_segstr_no_trans = 335544370L; -const ISC_LONG isc_segstr_no_write = 335544371L; -const ISC_LONG isc_segstr_wrong_db = 335544372L; -const ISC_LONG isc_sys_request = 335544373L; -const ISC_LONG isc_stream_eof = 335544374L; -const ISC_LONG isc_unavailable = 335544375L; -const ISC_LONG isc_unres_rel = 335544376L; -const ISC_LONG isc_uns_ext = 335544377L; -const ISC_LONG isc_wish_list = 335544378L; -const ISC_LONG isc_wrong_ods = 335544379L; -const ISC_LONG isc_wronumarg = 335544380L; -const ISC_LONG isc_imp_exc = 335544381L; -const ISC_LONG isc_random = 335544382L; -const ISC_LONG isc_fatal_conflict = 335544383L; -const ISC_LONG isc_badblk = 335544384L; -const ISC_LONG isc_invpoolcl = 335544385L; -const ISC_LONG isc_nopoolids = 335544386L; -const ISC_LONG isc_relbadblk = 335544387L; -const ISC_LONG isc_blktoobig = 335544388L; -const ISC_LONG isc_bufexh = 335544389L; -const ISC_LONG isc_syntaxerr = 335544390L; -const ISC_LONG isc_bufinuse = 335544391L; -const ISC_LONG isc_bdbincon = 335544392L; -const ISC_LONG isc_reqinuse = 335544393L; -const ISC_LONG isc_badodsver = 335544394L; -const ISC_LONG isc_relnotdef = 335544395L; -const ISC_LONG isc_fldnotdef = 335544396L; -const ISC_LONG isc_dirtypage = 335544397L; -const ISC_LONG isc_waifortra = 335544398L; -const ISC_LONG isc_doubleloc = 335544399L; -const ISC_LONG isc_nodnotfnd = 335544400L; -const ISC_LONG isc_dupnodfnd = 335544401L; -const ISC_LONG isc_locnotmar = 335544402L; -const ISC_LONG isc_badpagtyp = 335544403L; -const ISC_LONG isc_corrupt = 335544404L; -const ISC_LONG isc_badpage = 335544405L; -const ISC_LONG isc_badindex = 335544406L; -const ISC_LONG isc_dbbnotzer = 335544407L; -const ISC_LONG isc_tranotzer = 335544408L; -const ISC_LONG isc_trareqmis = 335544409L; -const ISC_LONG isc_badhndcnt = 335544410L; -const ISC_LONG isc_wrotpbver = 335544411L; -const ISC_LONG isc_wroblrver = 335544412L; -const ISC_LONG isc_wrodpbver = 335544413L; -const ISC_LONG isc_blobnotsup = 335544414L; -const ISC_LONG isc_badrelation = 335544415L; -const ISC_LONG isc_nodetach = 335544416L; -const ISC_LONG isc_notremote = 335544417L; -const ISC_LONG isc_trainlim = 335544418L; -const ISC_LONG isc_notinlim = 335544419L; -const ISC_LONG isc_traoutsta = 335544420L; -const ISC_LONG isc_connect_reject = 335544421L; -const ISC_LONG isc_dbfile = 335544422L; -const ISC_LONG isc_orphan = 335544423L; -const ISC_LONG isc_no_lock_mgr = 335544424L; -const ISC_LONG isc_ctxinuse = 335544425L; -const ISC_LONG isc_ctxnotdef = 335544426L; -const ISC_LONG isc_datnotsup = 335544427L; -const ISC_LONG isc_badmsgnum = 335544428L; -const ISC_LONG isc_badparnum = 335544429L; -const ISC_LONG isc_virmemexh = 335544430L; -const ISC_LONG isc_blocking_signal = 335544431L; -const ISC_LONG isc_lockmanerr = 335544432L; -const ISC_LONG isc_journerr = 335544433L; -const ISC_LONG isc_keytoobig = 335544434L; -const ISC_LONG isc_nullsegkey = 335544435L; -const ISC_LONG isc_sqlerr = 335544436L; -const ISC_LONG isc_wrodynver = 335544437L; -const ISC_LONG isc_funnotdef = 335544438L; -const ISC_LONG isc_funmismat = 335544439L; -const ISC_LONG isc_bad_msg_vec = 335544440L; -const ISC_LONG isc_bad_detach = 335544441L; -const ISC_LONG isc_noargacc_read = 335544442L; -const ISC_LONG isc_noargacc_write = 335544443L; -const ISC_LONG isc_read_only = 335544444L; -const ISC_LONG isc_ext_err = 335544445L; -const ISC_LONG isc_non_updatable = 335544446L; -const ISC_LONG isc_no_rollback = 335544447L; -const ISC_LONG isc_bad_sec_info = 335544448L; -const ISC_LONG isc_invalid_sec_info = 335544449L; -const ISC_LONG isc_misc_interpreted = 335544450L; -const ISC_LONG isc_update_conflict = 335544451L; -const ISC_LONG isc_unlicensed = 335544452L; -const ISC_LONG isc_obj_in_use = 335544453L; -const ISC_LONG isc_nofilter = 335544454L; -const ISC_LONG isc_shadow_accessed = 335544455L; -const ISC_LONG isc_invalid_sdl = 335544456L; -const ISC_LONG isc_out_of_bounds = 335544457L; -const ISC_LONG isc_invalid_dimension = 335544458L; -const ISC_LONG isc_rec_in_limbo = 335544459L; -const ISC_LONG isc_shadow_missing = 335544460L; -const ISC_LONG isc_cant_validate = 335544461L; -const ISC_LONG isc_cant_start_journal = 335544462L; -const ISC_LONG isc_gennotdef = 335544463L; -const ISC_LONG isc_cant_start_logging = 335544464L; -const ISC_LONG isc_bad_segstr_type = 335544465L; -const ISC_LONG isc_foreign_key = 335544466L; -const ISC_LONG isc_high_minor = 335544467L; -const ISC_LONG isc_tra_state = 335544468L; -const ISC_LONG isc_trans_invalid = 335544469L; -const ISC_LONG isc_buf_invalid = 335544470L; -const ISC_LONG isc_indexnotdefined = 335544471L; -const ISC_LONG isc_login = 335544472L; -const ISC_LONG isc_invalid_bookmark = 335544473L; -const ISC_LONG isc_bad_lock_level = 335544474L; -const ISC_LONG isc_relation_lock = 335544475L; -const ISC_LONG isc_record_lock = 335544476L; -const ISC_LONG isc_max_idx = 335544477L; -const ISC_LONG isc_jrn_enable = 335544478L; -const ISC_LONG isc_old_failure = 335544479L; -const ISC_LONG isc_old_in_progress = 335544480L; -const ISC_LONG isc_old_no_space = 335544481L; -const ISC_LONG isc_no_wal_no_jrn = 335544482L; -const ISC_LONG isc_num_old_files = 335544483L; -const ISC_LONG isc_wal_file_open = 335544484L; -const ISC_LONG isc_bad_stmt_handle = 335544485L; -const ISC_LONG isc_wal_failure = 335544486L; -const ISC_LONG isc_walw_err = 335544487L; -const ISC_LONG isc_logh_small = 335544488L; -const ISC_LONG isc_logh_inv_version = 335544489L; -const ISC_LONG isc_logh_open_flag = 335544490L; -const ISC_LONG isc_logh_open_flag2 = 335544491L; -const ISC_LONG isc_logh_diff_dbname = 335544492L; -const ISC_LONG isc_logf_unexpected_eof = 335544493L; -const ISC_LONG isc_logr_incomplete = 335544494L; -const ISC_LONG isc_logr_header_small = 335544495L; -const ISC_LONG isc_logb_small = 335544496L; -const ISC_LONG isc_wal_illegal_attach = 335544497L; -const ISC_LONG isc_wal_invalid_wpb = 335544498L; -const ISC_LONG isc_wal_err_rollover = 335544499L; -const ISC_LONG isc_no_wal = 335544500L; -const ISC_LONG isc_drop_wal = 335544501L; -const ISC_LONG isc_stream_not_defined = 335544502L; -const ISC_LONG isc_wal_subsys_error = 335544503L; -const ISC_LONG isc_wal_subsys_corrupt = 335544504L; -const ISC_LONG isc_no_archive = 335544505L; -const ISC_LONG isc_shutinprog = 335544506L; -const ISC_LONG isc_range_in_use = 335544507L; -const ISC_LONG isc_range_not_found = 335544508L; -const ISC_LONG isc_charset_not_found = 335544509L; -const ISC_LONG isc_lock_timeout = 335544510L; -const ISC_LONG isc_prcnotdef = 335544511L; -const ISC_LONG isc_prcmismat = 335544512L; -const ISC_LONG isc_wal_bugcheck = 335544513L; -const ISC_LONG isc_wal_cant_expand = 335544514L; -const ISC_LONG isc_codnotdef = 335544515L; -const ISC_LONG isc_xcpnotdef = 335544516L; -const ISC_LONG isc_except = 335544517L; -const ISC_LONG isc_cache_restart = 335544518L; -const ISC_LONG isc_bad_lock_handle = 335544519L; -const ISC_LONG isc_jrn_present = 335544520L; -const ISC_LONG isc_wal_err_rollover2 = 335544521L; -const ISC_LONG isc_wal_err_logwrite = 335544522L; -const ISC_LONG isc_wal_err_jrn_comm = 335544523L; -const ISC_LONG isc_wal_err_expansion = 335544524L; -const ISC_LONG isc_wal_err_setup = 335544525L; -const ISC_LONG isc_wal_err_ww_sync = 335544526L; -const ISC_LONG isc_wal_err_ww_start = 335544527L; -const ISC_LONG isc_shutdown = 335544528L; -const ISC_LONG isc_existing_priv_mod = 335544529L; -const ISC_LONG isc_primary_key_ref = 335544530L; -const ISC_LONG isc_primary_key_notnull = 335544531L; -const ISC_LONG isc_ref_cnstrnt_notfound = 335544532L; -const ISC_LONG isc_foreign_key_notfound = 335544533L; -const ISC_LONG isc_ref_cnstrnt_update = 335544534L; -const ISC_LONG isc_check_cnstrnt_update = 335544535L; -const ISC_LONG isc_check_cnstrnt_del = 335544536L; -const ISC_LONG isc_integ_index_seg_del = 335544537L; -const ISC_LONG isc_integ_index_seg_mod = 335544538L; -const ISC_LONG isc_integ_index_del = 335544539L; -const ISC_LONG isc_integ_index_mod = 335544540L; -const ISC_LONG isc_check_trig_del = 335544541L; -const ISC_LONG isc_check_trig_update = 335544542L; -const ISC_LONG isc_cnstrnt_fld_del = 335544543L; -const ISC_LONG isc_cnstrnt_fld_rename = 335544544L; -const ISC_LONG isc_rel_cnstrnt_update = 335544545L; -const ISC_LONG isc_constaint_on_view = 335544546L; -const ISC_LONG isc_invld_cnstrnt_type = 335544547L; -const ISC_LONG isc_primary_key_exists = 335544548L; -const ISC_LONG isc_systrig_update = 335544549L; -const ISC_LONG isc_not_rel_owner = 335544550L; -const ISC_LONG isc_grant_obj_notfound = 335544551L; -const ISC_LONG isc_grant_fld_notfound = 335544552L; -const ISC_LONG isc_grant_nopriv = 335544553L; -const ISC_LONG isc_nonsql_security_rel = 335544554L; -const ISC_LONG isc_nonsql_security_fld = 335544555L; -const ISC_LONG isc_wal_cache_err = 335544556L; -const ISC_LONG isc_shutfail = 335544557L; -const ISC_LONG isc_check_constraint = 335544558L; -const ISC_LONG isc_bad_svc_handle = 335544559L; -const ISC_LONG isc_shutwarn = 335544560L; -const ISC_LONG isc_wrospbver = 335544561L; -const ISC_LONG isc_bad_spb_form = 335544562L; -const ISC_LONG isc_svcnotdef = 335544563L; -const ISC_LONG isc_no_jrn = 335544564L; -const ISC_LONG isc_transliteration_failed = 335544565L; -const ISC_LONG isc_start_cm_for_wal = 335544566L; -const ISC_LONG isc_wal_ovflow_log_required = 335544567L; -const ISC_LONG isc_text_subtype = 335544568L; -const ISC_LONG isc_dsql_error = 335544569L; -const ISC_LONG isc_dsql_command_err = 335544570L; -const ISC_LONG isc_dsql_constant_err = 335544571L; -const ISC_LONG isc_dsql_cursor_err = 335544572L; -const ISC_LONG isc_dsql_datatype_err = 335544573L; -const ISC_LONG isc_dsql_decl_err = 335544574L; -const ISC_LONG isc_dsql_cursor_update_err = 335544575L; -const ISC_LONG isc_dsql_cursor_open_err = 335544576L; -const ISC_LONG isc_dsql_cursor_close_err = 335544577L; -const ISC_LONG isc_dsql_field_err = 335544578L; -const ISC_LONG isc_dsql_internal_err = 335544579L; -const ISC_LONG isc_dsql_relation_err = 335544580L; -const ISC_LONG isc_dsql_procedure_err = 335544581L; -const ISC_LONG isc_dsql_request_err = 335544582L; -const ISC_LONG isc_dsql_sqlda_err = 335544583L; -const ISC_LONG isc_dsql_var_count_err = 335544584L; -const ISC_LONG isc_dsql_stmt_handle = 335544585L; -const ISC_LONG isc_dsql_function_err = 335544586L; -const ISC_LONG isc_dsql_blob_err = 335544587L; -const ISC_LONG isc_collation_not_found = 335544588L; -const ISC_LONG isc_collation_not_for_charset = 335544589L; -const ISC_LONG isc_dsql_dup_option = 335544590L; -const ISC_LONG isc_dsql_tran_err = 335544591L; -const ISC_LONG isc_dsql_invalid_array = 335544592L; -const ISC_LONG isc_dsql_max_arr_dim_exceeded = 335544593L; -const ISC_LONG isc_dsql_arr_range_error = 335544594L; -const ISC_LONG isc_dsql_trigger_err = 335544595L; -const ISC_LONG isc_dsql_subselect_err = 335544596L; -const ISC_LONG isc_dsql_crdb_prepare_err = 335544597L; -const ISC_LONG isc_specify_field_err = 335544598L; -const ISC_LONG isc_num_field_err = 335544599L; -const ISC_LONG isc_col_name_err = 335544600L; -const ISC_LONG isc_where_err = 335544601L; -const ISC_LONG isc_table_view_err = 335544602L; -const ISC_LONG isc_distinct_err = 335544603L; -const ISC_LONG isc_key_field_count_err = 335544604L; -const ISC_LONG isc_subquery_err = 335544605L; -const ISC_LONG isc_expression_eval_err = 335544606L; -const ISC_LONG isc_node_err = 335544607L; -const ISC_LONG isc_command_end_err = 335544608L; -const ISC_LONG isc_index_name = 335544609L; -const ISC_LONG isc_exception_name = 335544610L; -const ISC_LONG isc_field_name = 335544611L; -const ISC_LONG isc_token_err = 335544612L; -const ISC_LONG isc_union_err = 335544613L; -const ISC_LONG isc_dsql_construct_err = 335544614L; -const ISC_LONG isc_field_aggregate_err = 335544615L; -const ISC_LONG isc_field_ref_err = 335544616L; -const ISC_LONG isc_order_by_err = 335544617L; -const ISC_LONG isc_return_mode_err = 335544618L; -const ISC_LONG isc_extern_func_err = 335544619L; -const ISC_LONG isc_alias_conflict_err = 335544620L; -const ISC_LONG isc_procedure_conflict_error = 335544621L; -const ISC_LONG isc_relation_conflict_err = 335544622L; -const ISC_LONG isc_dsql_domain_err = 335544623L; -const ISC_LONG isc_idx_seg_err = 335544624L; -const ISC_LONG isc_node_name_err = 335544625L; -const ISC_LONG isc_table_name = 335544626L; -const ISC_LONG isc_proc_name = 335544627L; -const ISC_LONG isc_idx_create_err = 335544628L; -const ISC_LONG isc_wal_shadow_err = 335544629L; -const ISC_LONG isc_dependency = 335544630L; -const ISC_LONG isc_idx_key_err = 335544631L; -const ISC_LONG isc_dsql_file_length_err = 335544632L; -const ISC_LONG isc_dsql_shadow_number_err = 335544633L; -const ISC_LONG isc_dsql_token_unk_err = 335544634L; -const ISC_LONG isc_dsql_no_relation_alias = 335544635L; -const ISC_LONG isc_indexname = 335544636L; -const ISC_LONG isc_no_stream_plan = 335544637L; -const ISC_LONG isc_stream_twice = 335544638L; -const ISC_LONG isc_stream_not_found = 335544639L; -const ISC_LONG isc_collation_requires_text = 335544640L; -const ISC_LONG isc_dsql_domain_not_found = 335544641L; -const ISC_LONG isc_index_unused = 335544642L; -const ISC_LONG isc_dsql_self_join = 335544643L; -const ISC_LONG isc_stream_bof = 335544644L; -const ISC_LONG isc_stream_crack = 335544645L; -const ISC_LONG isc_db_or_file_exists = 335544646L; -const ISC_LONG isc_invalid_operator = 335544647L; -const ISC_LONG isc_conn_lost = 335544648L; -const ISC_LONG isc_bad_checksum = 335544649L; -const ISC_LONG isc_page_type_err = 335544650L; -const ISC_LONG isc_ext_readonly_err = 335544651L; -const ISC_LONG isc_sing_select_err = 335544652L; -const ISC_LONG isc_psw_attach = 335544653L; -const ISC_LONG isc_psw_start_trans = 335544654L; -const ISC_LONG isc_invalid_direction = 335544655L; -const ISC_LONG isc_dsql_var_conflict = 335544656L; -const ISC_LONG isc_dsql_no_blob_array = 335544657L; -const ISC_LONG isc_dsql_base_table = 335544658L; -const ISC_LONG isc_duplicate_base_table = 335544659L; -const ISC_LONG isc_view_alias = 335544660L; -const ISC_LONG isc_index_root_page_full = 335544661L; -const ISC_LONG isc_dsql_blob_type_unknown = 335544662L; -const ISC_LONG isc_req_max_clones_exceeded = 335544663L; -const ISC_LONG isc_dsql_duplicate_spec = 335544664L; -const ISC_LONG isc_unique_key_violation = 335544665L; -const ISC_LONG isc_srvr_version_too_old = 335544666L; -const ISC_LONG isc_drdb_completed_with_errs = 335544667L; -const ISC_LONG isc_dsql_procedure_use_err = 335544668L; -const ISC_LONG isc_dsql_count_mismatch = 335544669L; -const ISC_LONG isc_blob_idx_err = 335544670L; -const ISC_LONG isc_array_idx_err = 335544671L; -const ISC_LONG isc_key_field_err = 335544672L; -const ISC_LONG isc_no_delete = 335544673L; -const ISC_LONG isc_del_last_field = 335544674L; -const ISC_LONG isc_sort_err = 335544675L; -const ISC_LONG isc_sort_mem_err = 335544676L; -const ISC_LONG isc_version_err = 335544677L; -const ISC_LONG isc_inval_key_posn = 335544678L; -const ISC_LONG isc_no_segments_err = 335544679L; -const ISC_LONG isc_crrp_data_err = 335544680L; -const ISC_LONG isc_rec_size_err = 335544681L; -const ISC_LONG isc_dsql_field_ref = 335544682L; -const ISC_LONG isc_req_depth_exceeded = 335544683L; -const ISC_LONG isc_no_field_access = 335544684L; -const ISC_LONG isc_no_dbkey = 335544685L; -const ISC_LONG isc_jrn_format_err = 335544686L; -const ISC_LONG isc_jrn_file_full = 335544687L; -const ISC_LONG isc_dsql_open_cursor_request = 335544688L; -const ISC_LONG isc_ib_error = 335544689L; -const ISC_LONG isc_cache_redef = 335544690L; -const ISC_LONG isc_cache_too_small = 335544691L; -const ISC_LONG isc_log_redef = 335544692L; -const ISC_LONG isc_log_too_small = 335544693L; -const ISC_LONG isc_partition_too_small = 335544694L; -const ISC_LONG isc_partition_not_supp = 335544695L; -const ISC_LONG isc_log_length_spec = 335544696L; -const ISC_LONG isc_precision_err = 335544697L; -const ISC_LONG isc_scale_nogt = 335544698L; -const ISC_LONG isc_expec_short = 335544699L; -const ISC_LONG isc_expec_long = 335544700L; -const ISC_LONG isc_expec_ushort = 335544701L; -const ISC_LONG isc_like_escape_invalid = 335544702L; -const ISC_LONG isc_svcnoexe = 335544703L; -const ISC_LONG isc_net_lookup_err = 335544704L; -const ISC_LONG isc_service_unknown = 335544705L; -const ISC_LONG isc_host_unknown = 335544706L; -const ISC_LONG isc_grant_nopriv_on_base = 335544707L; -const ISC_LONG isc_dyn_fld_ambiguous = 335544708L; -const ISC_LONG isc_dsql_agg_ref_err = 335544709L; -const ISC_LONG isc_complex_view = 335544710L; -const ISC_LONG isc_unprepared_stmt = 335544711L; -const ISC_LONG isc_expec_positive = 335544712L; -const ISC_LONG isc_dsql_sqlda_value_err = 335544713L; -const ISC_LONG isc_invalid_array_id = 335544714L; -const ISC_LONG isc_extfile_uns_op = 335544715L; -const ISC_LONG isc_svc_in_use = 335544716L; -const ISC_LONG isc_err_stack_limit = 335544717L; -const ISC_LONG isc_invalid_key = 335544718L; -const ISC_LONG isc_net_init_error = 335544719L; -const ISC_LONG isc_loadlib_failure = 335544720L; -const ISC_LONG isc_network_error = 335544721L; -const ISC_LONG isc_net_connect_err = 335544722L; -const ISC_LONG isc_net_connect_listen_err = 335544723L; -const ISC_LONG isc_net_event_connect_err = 335544724L; -const ISC_LONG isc_net_event_listen_err = 335544725L; -const ISC_LONG isc_net_read_err = 335544726L; -const ISC_LONG isc_net_write_err = 335544727L; -const ISC_LONG isc_integ_index_deactivate = 335544728L; -const ISC_LONG isc_integ_deactivate_primary = 335544729L; -const ISC_LONG isc_cse_not_supported = 335544730L; -const ISC_LONG isc_tra_must_sweep = 335544731L; -const ISC_LONG isc_unsupported_network_drive = 335544732L; -const ISC_LONG isc_io_create_err = 335544733L; -const ISC_LONG isc_io_open_err = 335544734L; -const ISC_LONG isc_io_close_err = 335544735L; -const ISC_LONG isc_io_read_err = 335544736L; -const ISC_LONG isc_io_write_err = 335544737L; -const ISC_LONG isc_io_delete_err = 335544738L; -const ISC_LONG isc_io_access_err = 335544739L; -const ISC_LONG isc_udf_exception = 335544740L; -const ISC_LONG isc_lost_db_connection = 335544741L; -const ISC_LONG isc_no_write_user_priv = 335544742L; -const ISC_LONG isc_token_too_long = 335544743L; -const ISC_LONG isc_max_att_exceeded = 335544744L; -const ISC_LONG isc_login_same_as_role_name = 335544745L; -const ISC_LONG isc_reftable_requires_pk = 335544746L; -const ISC_LONG isc_usrname_too_long = 335544747L; -const ISC_LONG isc_password_too_long = 335544748L; -const ISC_LONG isc_usrname_required = 335544749L; -const ISC_LONG isc_password_required = 335544750L; -const ISC_LONG isc_bad_protocol = 335544751L; -const ISC_LONG isc_dup_usrname_found = 335544752L; -const ISC_LONG isc_usrname_not_found = 335544753L; -const ISC_LONG isc_error_adding_sec_record = 335544754L; -const ISC_LONG isc_error_modifying_sec_record = 335544755L; -const ISC_LONG isc_error_deleting_sec_record = 335544756L; -const ISC_LONG isc_error_updating_sec_db = 335544757L; -const ISC_LONG isc_sort_rec_size_err = 335544758L; -const ISC_LONG isc_bad_default_value = 335544759L; -const ISC_LONG isc_invalid_clause = 335544760L; -const ISC_LONG isc_too_many_handles = 335544761L; -const ISC_LONG isc_optimizer_blk_exc = 335544762L; -const ISC_LONG isc_invalid_string_constant = 335544763L; -const ISC_LONG isc_transitional_date = 335544764L; -const ISC_LONG isc_read_only_database = 335544765L; -const ISC_LONG isc_must_be_dialect_2_and_up = 335544766L; -const ISC_LONG isc_blob_filter_exception = 335544767L; -const ISC_LONG isc_exception_access_violation = 335544768L; -const ISC_LONG isc_exception_datatype_missalignment = 335544769L; -const ISC_LONG isc_exception_array_bounds_exceeded = 335544770L; -const ISC_LONG isc_exception_float_denormal_operand = 335544771L; -const ISC_LONG isc_exception_float_divide_by_zero = 335544772L; -const ISC_LONG isc_exception_float_inexact_result = 335544773L; -const ISC_LONG isc_exception_float_invalid_operand = 335544774L; -const ISC_LONG isc_exception_float_overflow = 335544775L; -const ISC_LONG isc_exception_float_stack_check = 335544776L; -const ISC_LONG isc_exception_float_underflow = 335544777L; -const ISC_LONG isc_exception_integer_divide_by_zero = 335544778L; -const ISC_LONG isc_exception_integer_overflow = 335544779L; -const ISC_LONG isc_exception_unknown = 335544780L; -const ISC_LONG isc_exception_stack_overflow = 335544781L; -const ISC_LONG isc_exception_sigsegv = 335544782L; -const ISC_LONG isc_exception_sigill = 335544783L; -const ISC_LONG isc_exception_sigbus = 335544784L; -const ISC_LONG isc_exception_sigfpe = 335544785L; -const ISC_LONG isc_ext_file_delete = 335544786L; -const ISC_LONG isc_ext_file_modify = 335544787L; -const ISC_LONG isc_adm_task_denied = 335544788L; -const ISC_LONG isc_extract_input_mismatch = 335544789L; -const ISC_LONG isc_insufficient_svc_privileges = 335544790L; -const ISC_LONG isc_file_in_use = 335544791L; -const ISC_LONG isc_service_att_err = 335544792L; -const ISC_LONG isc_ddl_not_allowed_by_db_sql_dial = 335544793L; -const ISC_LONG isc_cancelled = 335544794L; -const ISC_LONG isc_unexp_spb_form = 335544795L; -const ISC_LONG isc_sql_dialect_datatype_unsupport = 335544796L; -const ISC_LONG isc_svcnouser = 335544797L; -const ISC_LONG isc_depend_on_uncommitted_rel = 335544798L; -const ISC_LONG isc_svc_name_missing = 335544799L; -const ISC_LONG isc_too_many_contexts = 335544800L; -const ISC_LONG isc_datype_notsup = 335544801L; -const ISC_LONG isc_dialect_reset_warning = 335544802L; -const ISC_LONG isc_dialect_not_changed = 335544803L; -const ISC_LONG isc_database_create_failed = 335544804L; -const ISC_LONG isc_inv_dialect_specified = 335544805L; -const ISC_LONG isc_valid_db_dialects = 335544806L; -const ISC_LONG isc_sqlwarn = 335544807L; -const ISC_LONG isc_dtype_renamed = 335544808L; -const ISC_LONG isc_extern_func_dir_error = 335544809L; -const ISC_LONG isc_date_range_exceeded = 335544810L; -const ISC_LONG isc_inv_client_dialect_specified = 335544811L; -const ISC_LONG isc_valid_client_dialects = 335544812L; -const ISC_LONG isc_optimizer_between_err = 335544813L; -const ISC_LONG isc_service_not_supported = 335544814L; -const ISC_LONG isc_generator_name = 335544815L; -const ISC_LONG isc_udf_name = 335544816L; -const ISC_LONG isc_bad_limit_param = 335544817L; -const ISC_LONG isc_bad_skip_param = 335544818L; -const ISC_LONG isc_io_32bit_exceeded_err = 335544819L; -const ISC_LONG isc_invalid_savepoint = 335544820L; -const ISC_LONG isc_dsql_column_pos_err = 335544821L; -const ISC_LONG isc_dsql_agg_where_err = 335544822L; -const ISC_LONG isc_dsql_agg_group_err = 335544823L; -const ISC_LONG isc_dsql_agg_column_err = 335544824L; -const ISC_LONG isc_dsql_agg_having_err = 335544825L; -const ISC_LONG isc_dsql_agg_nested_err = 335544826L; -const ISC_LONG isc_exec_sql_invalid_arg = 335544827L; -const ISC_LONG isc_exec_sql_invalid_req = 335544828L; -const ISC_LONG isc_exec_sql_invalid_var = 335544829L; -const ISC_LONG isc_exec_sql_max_call_exceeded = 335544830L; -const ISC_LONG isc_conf_access_denied = 335544831L; -const ISC_LONG isc_wrong_backup_state = 335544832L; -const ISC_LONG isc_wal_backup_err = 335544833L; -const ISC_LONG isc_cursor_not_open = 335544834L; -const ISC_LONG isc_bad_shutdown_mode = 335544835L; -const ISC_LONG isc_concat_overflow = 335544836L; -const ISC_LONG isc_bad_substring_offset = 335544837L; -const ISC_LONG isc_foreign_key_target_doesnt_exist = 335544838L; -const ISC_LONG isc_foreign_key_references_present = 335544839L; -const ISC_LONG isc_no_update = 335544840L; -const ISC_LONG isc_cursor_already_open = 335544841L; -const ISC_LONG isc_stack_trace = 335544842L; -const ISC_LONG isc_ctx_var_not_found = 335544843L; -const ISC_LONG isc_ctx_namespace_invalid = 335544844L; -const ISC_LONG isc_ctx_too_big = 335544845L; -const ISC_LONG isc_ctx_bad_argument = 335544846L; -const ISC_LONG isc_identifier_too_long = 335544847L; -const ISC_LONG isc_except2 = 335544848L; -const ISC_LONG isc_malformed_string = 335544849L; -const ISC_LONG isc_prc_out_param_mismatch = 335544850L; -const ISC_LONG isc_command_end_err2 = 335544851L; -const ISC_LONG isc_partner_idx_incompat_type = 335544852L; -const ISC_LONG isc_bad_substring_length = 335544853L; -const ISC_LONG isc_charset_not_installed = 335544854L; -const ISC_LONG isc_collation_not_installed = 335544855L; -const ISC_LONG isc_att_shutdown = 335544856L; -const ISC_LONG isc_blobtoobig = 335544857L; -const ISC_LONG isc_must_have_phys_field = 335544858L; -const ISC_LONG isc_invalid_time_precision = 335544859L; -const ISC_LONG isc_blob_convert_error = 335544860L; -const ISC_LONG isc_array_convert_error = 335544861L; -const ISC_LONG isc_record_lock_not_supp = 335544862L; -const ISC_LONG isc_partner_idx_not_found = 335544863L; -const ISC_LONG isc_tra_num_exc = 335544864L; -const ISC_LONG isc_field_disappeared = 335544865L; -const ISC_LONG isc_met_wrong_gtt_scope = 335544866L; -const ISC_LONG isc_subtype_for_internal_use = 335544867L; -const ISC_LONG isc_illegal_prc_type = 335544868L; -const ISC_LONG isc_invalid_sort_datatype = 335544869L; -const ISC_LONG isc_collation_name = 335544870L; -const ISC_LONG isc_domain_name = 335544871L; -const ISC_LONG isc_domnotdef = 335544872L; -const ISC_LONG isc_array_max_dimensions = 335544873L; -const ISC_LONG isc_max_db_per_trans_allowed = 335544874L; -const ISC_LONG isc_bad_debug_format = 335544875L; -const ISC_LONG isc_bad_proc_BLR = 335544876L; -const ISC_LONG isc_key_too_big = 335544877L; -const ISC_LONG isc_concurrent_transaction = 335544878L; -const ISC_LONG isc_not_valid_for_var = 335544879L; -const ISC_LONG isc_not_valid_for = 335544880L; -const ISC_LONG isc_need_difference = 335544881L; -const ISC_LONG isc_long_login = 335544882L; -const ISC_LONG isc_fldnotdef2 = 335544883L; -const ISC_LONG isc_gfix_db_name = 335740929L; -const ISC_LONG isc_gfix_invalid_sw = 335740930L; -const ISC_LONG isc_gfix_incmp_sw = 335740932L; -const ISC_LONG isc_gfix_replay_req = 335740933L; -const ISC_LONG isc_gfix_pgbuf_req = 335740934L; -const ISC_LONG isc_gfix_val_req = 335740935L; -const ISC_LONG isc_gfix_pval_req = 335740936L; -const ISC_LONG isc_gfix_trn_req = 335740937L; -const ISC_LONG isc_gfix_full_req = 335740940L; -const ISC_LONG isc_gfix_usrname_req = 335740941L; -const ISC_LONG isc_gfix_pass_req = 335740942L; -const ISC_LONG isc_gfix_subs_name = 335740943L; -const ISC_LONG isc_gfix_wal_req = 335740944L; -const ISC_LONG isc_gfix_sec_req = 335740945L; -const ISC_LONG isc_gfix_nval_req = 335740946L; -const ISC_LONG isc_gfix_type_shut = 335740947L; -const ISC_LONG isc_gfix_retry = 335740948L; -const ISC_LONG isc_gfix_retry_db = 335740951L; -const ISC_LONG isc_gfix_exceed_max = 335740991L; -const ISC_LONG isc_gfix_corrupt_pool = 335740992L; -const ISC_LONG isc_gfix_mem_exhausted = 335740993L; -const ISC_LONG isc_gfix_bad_pool = 335740994L; -const ISC_LONG isc_gfix_trn_not_valid = 335740995L; -const ISC_LONG isc_gfix_unexp_eoi = 335741012L; -const ISC_LONG isc_gfix_recon_fail = 335741018L; -const ISC_LONG isc_gfix_trn_unknown = 335741036L; -const ISC_LONG isc_gfix_mode_req = 335741038L; -const ISC_LONG isc_gfix_opt_SQL_dialect = 335741039L; -const ISC_LONG isc_gfix_pzval_req = 335741042L; -const ISC_LONG isc_dsql_dbkey_from_non_table = 336003074L; -const ISC_LONG isc_dsql_transitional_numeric = 336003075L; -const ISC_LONG isc_dsql_dialect_warning_expr = 336003076L; -const ISC_LONG isc_sql_db_dialect_dtype_unsupport = 336003077L; -const ISC_LONG isc_isc_sql_dialect_conflict_num = 336003079L; -const ISC_LONG isc_dsql_warning_number_ambiguous = 336003080L; -const ISC_LONG isc_dsql_warning_number_ambiguous1 = 336003081L; -const ISC_LONG isc_dsql_warn_precision_ambiguous = 336003082L; -const ISC_LONG isc_dsql_warn_precision_ambiguous1 = 336003083L; -const ISC_LONG isc_dsql_warn_precision_ambiguous2 = 336003084L; -const ISC_LONG isc_dsql_ambiguous_field_name = 336003085L; -const ISC_LONG isc_dsql_udf_return_pos_err = 336003086L; -const ISC_LONG isc_dsql_invalid_label = 336003087L; -const ISC_LONG isc_dsql_datatypes_not_comparable = 336003088L; -const ISC_LONG isc_dsql_cursor_invalid = 336003089L; -const ISC_LONG isc_dsql_cursor_redefined = 336003090L; -const ISC_LONG isc_dsql_cursor_not_found = 336003091L; -const ISC_LONG isc_dsql_cursor_exists = 336003092L; -const ISC_LONG isc_dsql_cursor_rel_ambiguous = 336003093L; -const ISC_LONG isc_dsql_cursor_rel_not_found = 336003094L; -const ISC_LONG isc_dsql_cursor_not_open = 336003095L; -const ISC_LONG isc_dsql_type_not_supp_ext_tab = 336003096L; -const ISC_LONG isc_dsql_feature_not_supported_ods = 336003097L; -const ISC_LONG isc_primary_key_required = 336003098L; -const ISC_LONG isc_upd_ins_doesnt_match_pk = 336003099L; -const ISC_LONG isc_upd_ins_doesnt_match_matching = 336003100L; -const ISC_LONG isc_upd_ins_with_complex_view = 336003101L; -const ISC_LONG isc_dsql_incompatible_trigger_type = 336003102L; -const ISC_LONG isc_dsql_db_trigger_type_cant_change = 336003103L; -const ISC_LONG isc_dyn_role_does_not_exist = 336068796L; -const ISC_LONG isc_dyn_no_grant_admin_opt = 336068797L; -const ISC_LONG isc_dyn_user_not_role_member = 336068798L; -const ISC_LONG isc_dyn_delete_role_failed = 336068799L; -const ISC_LONG isc_dyn_grant_role_to_user = 336068800L; -const ISC_LONG isc_dyn_inv_sql_role_name = 336068801L; -const ISC_LONG isc_dyn_dup_sql_role = 336068802L; -const ISC_LONG isc_dyn_kywd_spec_for_role = 336068803L; -const ISC_LONG isc_dyn_roles_not_supported = 336068804L; -const ISC_LONG isc_dyn_domain_name_exists = 336068812L; -const ISC_LONG isc_dyn_field_name_exists = 336068813L; -const ISC_LONG isc_dyn_dependency_exists = 336068814L; -const ISC_LONG isc_dyn_dtype_invalid = 336068815L; -const ISC_LONG isc_dyn_char_fld_too_small = 336068816L; -const ISC_LONG isc_dyn_invalid_dtype_conversion = 336068817L; -const ISC_LONG isc_dyn_dtype_conv_invalid = 336068818L; -const ISC_LONG isc_dyn_zero_len_id = 336068820L; -const ISC_LONG isc_max_coll_per_charset = 336068829L; -const ISC_LONG isc_invalid_coll_attr = 336068830L; -const ISC_LONG isc_dyn_wrong_gtt_scope = 336068840L; -const ISC_LONG isc_dyn_scale_too_big = 336068852L; -const ISC_LONG isc_dyn_precision_too_small = 336068853L; -const ISC_LONG isc_dyn_miss_priv_warning = 336068855L; -const ISC_LONG isc_dyn_ods_not_supp_feature = 336068856L; -const ISC_LONG isc_gbak_unknown_switch = 336330753L; -const ISC_LONG isc_gbak_page_size_missing = 336330754L; -const ISC_LONG isc_gbak_page_size_toobig = 336330755L; -const ISC_LONG isc_gbak_redir_ouput_missing = 336330756L; -const ISC_LONG isc_gbak_switches_conflict = 336330757L; -const ISC_LONG isc_gbak_unknown_device = 336330758L; -const ISC_LONG isc_gbak_no_protection = 336330759L; -const ISC_LONG isc_gbak_page_size_not_allowed = 336330760L; -const ISC_LONG isc_gbak_multi_source_dest = 336330761L; -const ISC_LONG isc_gbak_filename_missing = 336330762L; -const ISC_LONG isc_gbak_dup_inout_names = 336330763L; -const ISC_LONG isc_gbak_inv_page_size = 336330764L; -const ISC_LONG isc_gbak_db_specified = 336330765L; -const ISC_LONG isc_gbak_db_exists = 336330766L; -const ISC_LONG isc_gbak_unk_device = 336330767L; -const ISC_LONG isc_gbak_blob_info_failed = 336330772L; -const ISC_LONG isc_gbak_unk_blob_item = 336330773L; -const ISC_LONG isc_gbak_get_seg_failed = 336330774L; -const ISC_LONG isc_gbak_close_blob_failed = 336330775L; -const ISC_LONG isc_gbak_open_blob_failed = 336330776L; -const ISC_LONG isc_gbak_put_blr_gen_id_failed = 336330777L; -const ISC_LONG isc_gbak_unk_type = 336330778L; -const ISC_LONG isc_gbak_comp_req_failed = 336330779L; -const ISC_LONG isc_gbak_start_req_failed = 336330780L; -const ISC_LONG isc_gbak_rec_failed = 336330781L; -const ISC_LONG isc_gbak_rel_req_failed = 336330782L; -const ISC_LONG isc_gbak_db_info_failed = 336330783L; -const ISC_LONG isc_gbak_no_db_desc = 336330784L; -const ISC_LONG isc_gbak_db_create_failed = 336330785L; -const ISC_LONG isc_gbak_decomp_len_error = 336330786L; -const ISC_LONG isc_gbak_tbl_missing = 336330787L; -const ISC_LONG isc_gbak_blob_col_missing = 336330788L; -const ISC_LONG isc_gbak_create_blob_failed = 336330789L; -const ISC_LONG isc_gbak_put_seg_failed = 336330790L; -const ISC_LONG isc_gbak_rec_len_exp = 336330791L; -const ISC_LONG isc_gbak_inv_rec_len = 336330792L; -const ISC_LONG isc_gbak_exp_data_type = 336330793L; -const ISC_LONG isc_gbak_gen_id_failed = 336330794L; -const ISC_LONG isc_gbak_unk_rec_type = 336330795L; -const ISC_LONG isc_gbak_inv_bkup_ver = 336330796L; -const ISC_LONG isc_gbak_missing_bkup_desc = 336330797L; -const ISC_LONG isc_gbak_string_trunc = 336330798L; -const ISC_LONG isc_gbak_cant_rest_record = 336330799L; -const ISC_LONG isc_gbak_send_failed = 336330800L; -const ISC_LONG isc_gbak_no_tbl_name = 336330801L; -const ISC_LONG isc_gbak_unexp_eof = 336330802L; -const ISC_LONG isc_gbak_db_format_too_old = 336330803L; -const ISC_LONG isc_gbak_inv_array_dim = 336330804L; -const ISC_LONG isc_gbak_xdr_len_expected = 336330807L; -const ISC_LONG isc_gbak_open_bkup_error = 336330817L; -const ISC_LONG isc_gbak_open_error = 336330818L; -const ISC_LONG isc_gbak_missing_block_fac = 336330934L; -const ISC_LONG isc_gbak_inv_block_fac = 336330935L; -const ISC_LONG isc_gbak_block_fac_specified = 336330936L; -const ISC_LONG isc_gbak_missing_username = 336330940L; -const ISC_LONG isc_gbak_missing_password = 336330941L; -const ISC_LONG isc_gbak_missing_skipped_bytes = 336330952L; -const ISC_LONG isc_gbak_inv_skipped_bytes = 336330953L; -const ISC_LONG isc_gbak_err_restore_charset = 336330965L; -const ISC_LONG isc_gbak_err_restore_collation = 336330967L; -const ISC_LONG isc_gbak_read_error = 336330972L; -const ISC_LONG isc_gbak_write_error = 336330973L; -const ISC_LONG isc_gbak_db_in_use = 336330985L; -const ISC_LONG isc_gbak_sysmemex = 336330990L; -const ISC_LONG isc_gbak_restore_role_failed = 336331002L; -const ISC_LONG isc_gbak_role_op_missing = 336331005L; -const ISC_LONG isc_gbak_page_buffers_missing = 336331010L; -const ISC_LONG isc_gbak_page_buffers_wrong_param = 336331011L; -const ISC_LONG isc_gbak_page_buffers_restore = 336331012L; -const ISC_LONG isc_gbak_inv_size = 336331014L; -const ISC_LONG isc_gbak_file_outof_sequence = 336331015L; -const ISC_LONG isc_gbak_join_file_missing = 336331016L; -const ISC_LONG isc_gbak_stdin_not_supptd = 336331017L; -const ISC_LONG isc_gbak_stdout_not_supptd = 336331018L; -const ISC_LONG isc_gbak_bkup_corrupt = 336331019L; -const ISC_LONG isc_gbak_unk_db_file_spec = 336331020L; -const ISC_LONG isc_gbak_hdr_write_failed = 336331021L; -const ISC_LONG isc_gbak_disk_space_ex = 336331022L; -const ISC_LONG isc_gbak_size_lt_min = 336331023L; -const ISC_LONG isc_gbak_svc_name_missing = 336331025L; -const ISC_LONG isc_gbak_not_ownr = 336331026L; -const ISC_LONG isc_gbak_mode_req = 336331031L; -const ISC_LONG isc_gbak_just_data = 336331033L; -const ISC_LONG isc_gbak_data_only = 336331034L; -const ISC_LONG isc_dsql_too_old_ods = 336397205L; -const ISC_LONG isc_dsql_table_not_found = 336397206L; -const ISC_LONG isc_dsql_view_not_found = 336397207L; -const ISC_LONG isc_dsql_line_col_error = 336397208L; -const ISC_LONG isc_dsql_unknown_pos = 336397209L; -const ISC_LONG isc_dsql_no_dup_name = 336397210L; -const ISC_LONG isc_dsql_too_many_values = 336397211L; -const ISC_LONG isc_dsql_no_array_computed = 336397212L; -const ISC_LONG isc_dsql_implicit_domain_name = 336397213L; -const ISC_LONG isc_dsql_only_can_subscript_array = 336397214L; -const ISC_LONG isc_dsql_max_sort_items = 336397215L; -const ISC_LONG isc_dsql_max_group_items = 336397216L; -const ISC_LONG isc_dsql_conflicting_sort_field = 336397217L; -const ISC_LONG isc_dsql_derived_table_more_columns = 336397218L; -const ISC_LONG isc_dsql_derived_table_less_columns = 336397219L; -const ISC_LONG isc_dsql_derived_field_unnamed = 336397220L; -const ISC_LONG isc_dsql_derived_field_dup_name = 336397221L; -const ISC_LONG isc_dsql_derived_alias_select = 336397222L; -const ISC_LONG isc_dsql_derived_alias_field = 336397223L; -const ISC_LONG isc_dsql_auto_field_bad_pos = 336397224L; -const ISC_LONG isc_dsql_cte_wrong_reference = 336397225L; -const ISC_LONG isc_dsql_cte_cycle = 336397226L; -const ISC_LONG isc_dsql_cte_outer_join = 336397227L; -const ISC_LONG isc_dsql_cte_mult_references = 336397228L; -const ISC_LONG isc_dsql_cte_not_a_union = 336397229L; -const ISC_LONG isc_dsql_cte_nonrecurs_after_recurs = 336397230L; -const ISC_LONG isc_dsql_cte_wrong_clause = 336397231L; -const ISC_LONG isc_dsql_cte_union_all = 336397232L; -const ISC_LONG isc_dsql_cte_miss_nonrecursive = 336397233L; -const ISC_LONG isc_dsql_cte_nested_with = 336397234L; -const ISC_LONG isc_dsql_col_more_than_once_using = 336397235L; -const ISC_LONG isc_dsql_unsupp_feature_dialect = 336397236L; -const ISC_LONG isc_gsec_cant_open_db = 336723983L; -const ISC_LONG isc_gsec_switches_error = 336723984L; -const ISC_LONG isc_gsec_no_op_spec = 336723985L; -const ISC_LONG isc_gsec_no_usr_name = 336723986L; -const ISC_LONG isc_gsec_err_add = 336723987L; -const ISC_LONG isc_gsec_err_modify = 336723988L; -const ISC_LONG isc_gsec_err_find_mod = 336723989L; -const ISC_LONG isc_gsec_err_rec_not_found = 336723990L; -const ISC_LONG isc_gsec_err_delete = 336723991L; -const ISC_LONG isc_gsec_err_find_del = 336723992L; -const ISC_LONG isc_gsec_err_find_disp = 336723996L; -const ISC_LONG isc_gsec_inv_param = 336723997L; -const ISC_LONG isc_gsec_op_specified = 336723998L; -const ISC_LONG isc_gsec_pw_specified = 336723999L; -const ISC_LONG isc_gsec_uid_specified = 336724000L; -const ISC_LONG isc_gsec_gid_specified = 336724001L; -const ISC_LONG isc_gsec_proj_specified = 336724002L; -const ISC_LONG isc_gsec_org_specified = 336724003L; -const ISC_LONG isc_gsec_fname_specified = 336724004L; -const ISC_LONG isc_gsec_mname_specified = 336724005L; -const ISC_LONG isc_gsec_lname_specified = 336724006L; -const ISC_LONG isc_gsec_inv_switch = 336724008L; -const ISC_LONG isc_gsec_amb_switch = 336724009L; -const ISC_LONG isc_gsec_no_op_specified = 336724010L; -const ISC_LONG isc_gsec_params_not_allowed = 336724011L; -const ISC_LONG isc_gsec_incompat_switch = 336724012L; -const ISC_LONG isc_gsec_inv_username = 336724044L; -const ISC_LONG isc_gsec_inv_pw_length = 336724045L; -const ISC_LONG isc_gsec_db_specified = 336724046L; -const ISC_LONG isc_gsec_db_admin_specified = 336724047L; -const ISC_LONG isc_gsec_db_admin_pw_specified = 336724048L; -const ISC_LONG isc_gsec_sql_role_specified = 336724049L; -const ISC_LONG isc_license_no_file = 336789504L; -const ISC_LONG isc_license_op_specified = 336789523L; -const ISC_LONG isc_license_op_missing = 336789524L; -const ISC_LONG isc_license_inv_switch = 336789525L; -const ISC_LONG isc_license_inv_switch_combo = 336789526L; -const ISC_LONG isc_license_inv_op_combo = 336789527L; -const ISC_LONG isc_license_amb_switch = 336789528L; -const ISC_LONG isc_license_inv_parameter = 336789529L; -const ISC_LONG isc_license_param_specified = 336789530L; -const ISC_LONG isc_license_param_req = 336789531L; -const ISC_LONG isc_license_syntx_error = 336789532L; -const ISC_LONG isc_license_dup_id = 336789534L; -const ISC_LONG isc_license_inv_id_key = 336789535L; -const ISC_LONG isc_license_err_remove = 336789536L; -const ISC_LONG isc_license_err_update = 336789537L; -const ISC_LONG isc_license_err_convert = 336789538L; -const ISC_LONG isc_license_err_unk = 336789539L; -const ISC_LONG isc_license_svc_err_add = 336789540L; -const ISC_LONG isc_license_svc_err_remove = 336789541L; -const ISC_LONG isc_license_eval_exists = 336789563L; -const ISC_LONG isc_gstat_unknown_switch = 336920577L; -const ISC_LONG isc_gstat_retry = 336920578L; -const ISC_LONG isc_gstat_wrong_ods = 336920579L; -const ISC_LONG isc_gstat_unexpected_eof = 336920580L; -const ISC_LONG isc_gstat_open_err = 336920605L; -const ISC_LONG isc_gstat_read_err = 336920606L; -const ISC_LONG isc_gstat_sysmemex = 336920607L; -const ISC_LONG isc_fbsvcmgr_bad_am = 336986113L; -const ISC_LONG isc_fbsvcmgr_bad_wm = 336986114L; -const ISC_LONG isc_fbsvcmgr_bad_rs = 336986115L; -const ISC_LONG isc_fbsvcmgr_info_err = 336986116L; -const ISC_LONG isc_fbsvcmgr_query_err = 336986117L; -const ISC_LONG isc_fbsvcmgr_switch_unknown = 336986118L; -const ISC_LONG isc_err_max = 826; - -#else /* c definitions */ - -#define isc_facility 20 -#define isc_base 335544320L -#define isc_factor 1 - -#define isc_arg_end 0 /* end of argument list */ -#define isc_arg_gds 1 /* generic DSRI status value */ -#define isc_arg_string 2 /* string argument */ -#define isc_arg_cstring 3 /* count & string argument */ -#define isc_arg_number 4 /* numeric argument (long) */ -#define isc_arg_interpreted 5 /* interpreted status code (string) */ -#define isc_arg_vms 6 /* VAX/VMS status code (long) */ -#define isc_arg_unix 7 /* UNIX error code */ -#define isc_arg_domain 8 /* Apollo/Domain error code */ -#define isc_arg_dos 9 /* MSDOS/OS2 error code */ -#define isc_arg_mpexl 10 /* HP MPE/XL error code */ -#define isc_arg_mpexl_ipc 11 /* HP MPE/XL IPC error code */ -#define isc_arg_next_mach 15 /* NeXT/Mach error code */ -#define isc_arg_netware 16 /* NetWare error code */ -#define isc_arg_win32 17 /* Win32 error code */ -#define isc_arg_warning 18 /* warning argument */ - #define isc_arith_except 335544321L #define isc_bad_dbkey 335544322L #define isc_bad_db_format 335544323L @@ -1400,75 +509,52 @@ const ISC_LONG isc_err_max = 826; #define isc_valid_client_dialects 335544812L #define isc_optimizer_between_err 335544813L #define isc_service_not_supported 335544814L -#define isc_generator_name 335544815L -#define isc_udf_name 335544816L -#define isc_bad_limit_param 335544817L -#define isc_bad_skip_param 335544818L -#define isc_io_32bit_exceeded_err 335544819L -#define isc_invalid_savepoint 335544820L -#define isc_dsql_column_pos_err 335544821L -#define isc_dsql_agg_where_err 335544822L -#define isc_dsql_agg_group_err 335544823L -#define isc_dsql_agg_column_err 335544824L -#define isc_dsql_agg_having_err 335544825L -#define isc_dsql_agg_nested_err 335544826L -#define isc_exec_sql_invalid_arg 335544827L -#define isc_exec_sql_invalid_req 335544828L -#define isc_exec_sql_invalid_var 335544829L -#define isc_exec_sql_max_call_exceeded 335544830L -#define isc_conf_access_denied 335544831L -#define isc_wrong_backup_state 335544832L -#define isc_wal_backup_err 335544833L -#define isc_cursor_not_open 335544834L -#define isc_bad_shutdown_mode 335544835L -#define isc_concat_overflow 335544836L -#define isc_bad_substring_offset 335544837L -#define isc_foreign_key_target_doesnt_exist 335544838L -#define isc_foreign_key_references_present 335544839L -#define isc_no_update 335544840L -#define isc_cursor_already_open 335544841L -#define isc_stack_trace 335544842L -#define isc_ctx_var_not_found 335544843L -#define isc_ctx_namespace_invalid 335544844L -#define isc_ctx_too_big 335544845L -#define isc_ctx_bad_argument 335544846L -#define isc_identifier_too_long 335544847L -#define isc_except2 335544848L -#define isc_malformed_string 335544849L -#define isc_prc_out_param_mismatch 335544850L -#define isc_command_end_err2 335544851L -#define isc_partner_idx_incompat_type 335544852L -#define isc_bad_substring_length 335544853L -#define isc_charset_not_installed 335544854L -#define isc_collation_not_installed 335544855L -#define isc_att_shutdown 335544856L -#define isc_blobtoobig 335544857L -#define isc_must_have_phys_field 335544858L -#define isc_invalid_time_precision 335544859L -#define isc_blob_convert_error 335544860L -#define isc_array_convert_error 335544861L -#define isc_record_lock_not_supp 335544862L -#define isc_partner_idx_not_found 335544863L -#define isc_tra_num_exc 335544864L -#define isc_field_disappeared 335544865L -#define isc_met_wrong_gtt_scope 335544866L -#define isc_subtype_for_internal_use 335544867L -#define isc_illegal_prc_type 335544868L -#define isc_invalid_sort_datatype 335544869L -#define isc_collation_name 335544870L -#define isc_domain_name 335544871L -#define isc_domnotdef 335544872L -#define isc_array_max_dimensions 335544873L -#define isc_max_db_per_trans_allowed 335544874L -#define isc_bad_debug_format 335544875L -#define isc_bad_proc_BLR 335544876L -#define isc_key_too_big 335544877L -#define isc_concurrent_transaction 335544878L -#define isc_not_valid_for_var 335544879L -#define isc_not_valid_for 335544880L -#define isc_need_difference 335544881L -#define isc_long_login 335544882L -#define isc_fldnotdef2 335544883L +#define isc_savepoint_err 335544815L +#define isc_generator_name 335544816L +#define isc_udf_name 335544817L +#define isc_non_unique_service_name 335544818L +#define isc_tran_no_savepoint 335544819L +#define isc_must_rollback 335544820L +#define isc_tempnotsup 335544821L +#define isc_string_too_large 335544822L +#define isc_logr_timestamp_mismatch 335544823L +#define isc_old_dump_stats 335544824L +#define isc_old_appendix_stats 335544825L +#define isc_journal_not_supported 335544826L +#define isc_journal_archive_in_use 335544827L +#define isc_inet_route_failed 335544828L +#define isc_inet_route_circular 335544829L +#define isc_inet_route_multiple 335544830L +#define isc_archive_no_access 335544831L +#define isc_recover_dump_incomplete 335544832L +#define isc_recover_stats 335544833L +#define isc_recovery_in_progress 335544834L +#define isc_not_recover_dump 335544835L +#define isc_db_prealloc_warning 335544836L +#define isc_crypto_module_not_loaded 335544837L +#define isc_crypto_lookup_failed 335544838L +#define isc_crypto_invalid_version 335544839L +#define isc_sys_encrypt_passwd_no_match 335544840L +#define isc_sys_encrypt_passwd_required 335544841L +#define isc_pag_encrypt_value_corrupt 335544842L +#define isc_decrypt_of_encrypt_value_failed 335544843L +#define isc_bad_encrypt_key_length 335544844L +#define isc_encrypt_passwd_not_set 335544845L +#define isc_encryption_not_found 335544846L +#define isc_unencrypt_blob_assign 335544847L +#define isc_encryption_name 335544848L +#define isc_sep_missing_or_corrupt 335544849L +#define isc_exec_stmt2_prepare 335544850L +#define isc_exec_stmt2_non_select 335544851L +#define isc_exec_stmt2_invalid_into 335544852L +#define isc_exec_stmt2_execute 335544853L +#define isc_exec_stmt2_fetch_err 335544854L +#define isc_exec_stmt2_single_multi 335544855L +#define isc_no_blk_factor_update 335544856L +#define isc_exec_stmt_disallow 335544857L +#define isc_exec_stmt2_null 335544858L +#define isc_set_page_buffers 335544859L +#define isc_table_truncated 335544860L #define isc_gfix_db_name 335740929L #define isc_gfix_invalid_sw 335740930L #define isc_gfix_incmp_sw 335740932L @@ -1497,7 +583,7 @@ const ISC_LONG isc_err_max = 826; #define isc_gfix_trn_unknown 335741036L #define isc_gfix_mode_req 335741038L #define isc_gfix_opt_SQL_dialect 335741039L -#define isc_gfix_pzval_req 335741042L +#define isc_gfix_commits_opt 335741041L #define isc_dsql_dbkey_from_non_table 336003074L #define isc_dsql_transitional_numeric 336003075L #define isc_dsql_dialect_warning_expr 336003076L @@ -1508,25 +594,19 @@ const ISC_LONG isc_err_max = 826; #define isc_dsql_warn_precision_ambiguous 336003082L #define isc_dsql_warn_precision_ambiguous1 336003083L #define isc_dsql_warn_precision_ambiguous2 336003084L -#define isc_dsql_ambiguous_field_name 336003085L -#define isc_dsql_udf_return_pos_err 336003086L -#define isc_dsql_invalid_label 336003087L -#define isc_dsql_datatypes_not_comparable 336003088L -#define isc_dsql_cursor_invalid 336003089L -#define isc_dsql_cursor_redefined 336003090L -#define isc_dsql_cursor_not_found 336003091L -#define isc_dsql_cursor_exists 336003092L -#define isc_dsql_cursor_rel_ambiguous 336003093L -#define isc_dsql_cursor_rel_not_found 336003094L -#define isc_dsql_cursor_not_open 336003095L -#define isc_dsql_type_not_supp_ext_tab 336003096L -#define isc_dsql_feature_not_supported_ods 336003097L -#define isc_primary_key_required 336003098L -#define isc_upd_ins_doesnt_match_pk 336003099L -#define isc_upd_ins_doesnt_match_matching 336003100L -#define isc_upd_ins_with_complex_view 336003101L -#define isc_dsql_incompatible_trigger_type 336003102L -#define isc_dsql_db_trigger_type_cant_change 336003103L +#define isc_dsql_rows_ties_err 336003085L +#define isc_dsql_cursor_stmt_err 336003086L +#define isc_dsql_on_commit_invalid 336003087L +#define isc_dsql_gen_cnstrnt_ref_temp 336003088L +#define isc_dsql_persist_cnstrnt_ref_temp 336003089L +#define isc_dsql_temp_cnstrnt_ref_persist 336003090L +#define isc_dsql_persist_refs_temp 336003091L +#define isc_dsql_temp_refs_persist 336003092L +#define isc_dsql_temp_refs_mismatch 336003093L +#define isc_dsql_usrname_lower 336003094L +#define isc_dsql_select_in_batch 336003095L +#define isc_dsql_bad_encrypt_length 336003096L +#define isc_dsql_bad_passwd_digest 336003097L #define isc_dyn_role_does_not_exist 336068796L #define isc_dyn_no_grant_admin_opt 336068797L #define isc_dyn_user_not_role_member 336068798L @@ -1543,14 +623,24 @@ const ISC_LONG isc_err_max = 826; #define isc_dyn_char_fld_too_small 336068816L #define isc_dyn_invalid_dtype_conversion 336068817L #define isc_dyn_dtype_conv_invalid 336068818L -#define isc_dyn_zero_len_id 336068820L -#define isc_max_coll_per_charset 336068829L -#define isc_invalid_coll_attr 336068830L -#define isc_dyn_wrong_gtt_scope 336068840L -#define isc_dyn_scale_too_big 336068852L -#define isc_dyn_precision_too_small 336068853L -#define isc_dyn_miss_priv_warning 336068855L -#define isc_dyn_ods_not_supp_feature 336068856L +#define isc_dyn_gen_does_not_exist 336068820L +#define isc_dyn_delete_generator_failed 336068821L +#define isc_dyn_drop_db_owner 336068836L +#define isc_dyn_encrypt_admin_option_require 336068840L +#define isc_dyn_sys_encrypt_passwd_not_set 336068841L +#define isc_dyn_define_encrypt_failed 336068842L +#define isc_dyn_encrypt_not_supported 336068843L +#define isc_dyn_dso_required 336068844L +#define isc_dyn_encryption_not_found 336068851L +#define isc_dyn_default_encryption_exists 336068852L +#define isc_dyn_encrypt_passwd_invalid 336068853L +#define isc_dyn_encrypt_password_col_invalid 336068854L +#define isc_dyn_subscribe_not_supported 336068860L +#define isc_dyn_define_subscript_failed 336068862L +#define isc_dyn_relation_notfound 336068864L +#define isc_dyn_delete_subscribers_failed 336068869L +#define isc_dyn_subscribers_exist 336068870L +#define isc_dyn_delete_subscription_failed 336068871L #define isc_gbak_unknown_switch 336330753L #define isc_gbak_page_size_missing 336330754L #define isc_gbak_page_size_toobig 336330755L @@ -1633,40 +723,15 @@ const ISC_LONG isc_err_max = 826; #define isc_gbak_svc_name_missing 336331025L #define isc_gbak_not_ownr 336331026L #define isc_gbak_mode_req 336331031L -#define isc_gbak_just_data 336331033L -#define isc_gbak_data_only 336331034L -#define isc_dsql_too_old_ods 336397205L -#define isc_dsql_table_not_found 336397206L -#define isc_dsql_view_not_found 336397207L -#define isc_dsql_line_col_error 336397208L -#define isc_dsql_unknown_pos 336397209L -#define isc_dsql_no_dup_name 336397210L -#define isc_dsql_too_many_values 336397211L -#define isc_dsql_no_array_computed 336397212L -#define isc_dsql_implicit_domain_name 336397213L -#define isc_dsql_only_can_subscript_array 336397214L -#define isc_dsql_max_sort_items 336397215L -#define isc_dsql_max_group_items 336397216L -#define isc_dsql_conflicting_sort_field 336397217L -#define isc_dsql_derived_table_more_columns 336397218L -#define isc_dsql_derived_table_less_columns 336397219L -#define isc_dsql_derived_field_unnamed 336397220L -#define isc_dsql_derived_field_dup_name 336397221L -#define isc_dsql_derived_alias_select 336397222L -#define isc_dsql_derived_alias_field 336397223L -#define isc_dsql_auto_field_bad_pos 336397224L -#define isc_dsql_cte_wrong_reference 336397225L -#define isc_dsql_cte_cycle 336397226L -#define isc_dsql_cte_outer_join 336397227L -#define isc_dsql_cte_mult_references 336397228L -#define isc_dsql_cte_not_a_union 336397229L -#define isc_dsql_cte_nonrecurs_after_recurs 336397230L -#define isc_dsql_cte_wrong_clause 336397231L -#define isc_dsql_cte_union_all 336397232L -#define isc_dsql_cte_miss_nonrecursive 336397233L -#define isc_dsql_cte_nested_with 336397234L -#define isc_dsql_col_more_than_once_using 336397235L -#define isc_dsql_unsupp_feature_dialect 336397236L +#define isc_gbak_validate_restore 336331034L +#define isc_gbak_write_req 336331073L +#define isc_gbak_wish_list 336331074L +#define isc_gbak_ods_version_major 336331075L +#define isc_gbak_starting_trans 336331076L +#define isc_gbak_ods_version_major_missing 336331077L +#define isc_gbak_starting_trans_missing 336331078L +#define isc_gbak_wrong_param 336331079L +#define isc_HLP_SETSAVEPOINT 336658539L #define isc_gsec_cant_open_db 336723983L #define isc_gsec_switches_error 336723984L #define isc_gsec_no_op_spec 336723985L @@ -1719,6 +784,15 @@ const ISC_LONG isc_err_max = 826; #define isc_license_svc_err_add 336789540L #define isc_license_svc_err_remove 336789541L #define isc_license_eval_exists 336789563L +#define isc_smp_cpu_license 336789570L +#define isc_node_locked_full_unlimited_serve 336789571L +#define isc_dev_only_full_server_licenses 336789572L +#define isc_license_not_registered 336789573L +#define isc_license_library_unloadable 336789574L +#define isc_license_registration_file 336789575L +#define isc_license_expire_limit 336789576L +#define isc_license_bad_reg_file 336789577L +#define isc_license_bad_lic_file 336789578L #define isc_gstat_unknown_switch 336920577L #define isc_gstat_retry 336920578L #define isc_gstat_wrong_ods 336920579L @@ -1726,14 +800,6 @@ const ISC_LONG isc_err_max = 826; #define isc_gstat_open_err 336920605L #define isc_gstat_read_err 336920606L #define isc_gstat_sysmemex 336920607L -#define isc_fbsvcmgr_bad_am 336986113L -#define isc_fbsvcmgr_bad_wm 336986114L -#define isc_fbsvcmgr_bad_rs 336986115L -#define isc_fbsvcmgr_info_err 336986116L -#define isc_fbsvcmgr_query_err 336986117L -#define isc_fbsvcmgr_switch_unknown 336986118L -#define isc_err_max 826 +#define isc_err_max 785 +/* END CONVERT TAG */ -#endif - -#endif /* JRD_GEN_IBERROR_H */ diff --git a/libraries/SQLAPI/include/odbcAPI.h b/libraries/SQLAPI/include/odbcAPI.h index 20f2dd5f5..d3827d27d 100644 --- a/libraries/SQLAPI/include/odbcAPI.h +++ b/libraries/SQLAPI/include/odbcAPI.h @@ -464,7 +464,23 @@ class SQLAPI_API odbcCommandHandles : public saCommandHandles public: odbcCommandHandles(); - SQLHSTMT m_hstmt; + SQLHSTMT m_hstmt; +}; + +class SQLAPI_API odbcExternalConnection +{ + bool m_bAttached; + SAConnection *m_pCon; + +public: + SQLHENV m_henv; + SQLHDBC m_hdbc; + +public: + odbcExternalConnection(SAConnection *pCon, SQLHENV henv, SQLHDBC hdbc); + void Attach(); + void Detach(); + ~odbcExternalConnection(); }; extern odbcAPI g_odbcAPI; diff --git a/libraries/SQLAPI/include/oraAPI.h b/libraries/SQLAPI/include/oraAPI.h index d27c86686..2568cb01b 100644 --- a/libraries/SQLAPI/include/oraAPI.h +++ b/libraries/SQLAPI/include/oraAPI.h @@ -1,532 +1,593 @@ -// ora8API.h -// -////////////////////////////////////////////////////////////////////// - -#if !defined(__ORA8API_H__) -#define __ORA8API_H__ - -#include "SQLAPI.h" - -// API header(s) -#include - -extern long g_nORA8DLLVersionLoaded; - -extern void AddORA8Support(const SAConnection * pCon); -extern void ReleaseORA8Support(); - -// 8.0.x calls -typedef sword (*OCIInitialize_t)(ub4 mode, dvoid *ctxp, - dvoid *(*malocfp)(dvoid *ctxp, size_t size), - dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize), - void (*mfreefp)(dvoid *ctxp, dvoid *memptr) ); - -typedef sword (*OCIHandleAlloc_t)(CONST dvoid *parenth, dvoid **hndlpp, CONST ub4 type, - CONST size_t xtramem_sz, dvoid **usrmempp); - -typedef sword (*OCIHandleFree_t)(dvoid *hndlp, CONST ub4 type); - - -typedef sword (*OCIDescriptorAlloc_t)(CONST dvoid *parenth, dvoid **descpp, CONST ub4 type, - CONST size_t xtramem_sz, dvoid **usrmempp); - -typedef sword (*OCIDescriptorFree_t)(dvoid *descp, CONST ub4 type); - -typedef sword (*OCIEnvInit_t)(OCIEnv **envp, ub4 mode, - size_t xtramem_sz, dvoid **usrmempp); - -typedef sword (*OCIServerAttach_t)(OCIServer *srvhp, OCIError *errhp, - CONST text *dblink, sb4 dblink_len, ub4 mode); - -typedef sword (*OCIServerDetach_t)(OCIServer *srvhp, OCIError *errhp, ub4 mode); - -typedef sword (*OCISessionBegin_t)(OCISvcCtx *svchp, OCIError *errhp, OCISession *usrhp, - ub4 credt, ub4 mode); - -typedef sword (*OCISessionEnd_t)(OCISvcCtx *svchp, OCIError *errhp, OCISession *usrhp, - ub4 mode); - -typedef sword (*OCILogon_t)(OCIEnv *envhp, OCIError *errhp, OCISvcCtx **svchp, - CONST text *username, ub4 uname_len, - CONST text *password, ub4 passwd_len, - CONST text *dbname, ub4 dbname_len); - -typedef sword (*OCILogoff_t)(OCISvcCtx *svchp, OCIError *errhp); - - -typedef sword (*OCIPasswordChange_t)(OCISvcCtx *svchp, OCIError *errhp, - CONST text *user_name, ub4 usernm_len, - CONST text *opasswd, ub4 opasswd_len, - CONST text *npasswd, ub4 npasswd_len, ub4 mode); - -typedef sword (*OCIStmtPrepare_t)(OCIStmt *stmtp, OCIError *errhp, CONST text *stmt, - ub4 stmt_len, ub4 language, ub4 mode); - -typedef sword (*OCIBindByPos_t)(OCIStmt *stmtp, OCIBind **bindp, OCIError *errhp, - ub4 position, dvoid *valuep, sb4 value_sz, - ub2 dty, dvoid *indp, ub2 *alenp, ub2 *rcodep, - ub4 maxarr_len, ub4 *curelep, ub4 mode); - -typedef sword (*OCIBindByName_t)(OCIStmt *stmtp, OCIBind **bindp, OCIError *errhp, - CONST text *placeholder, sb4 placeh_len, - dvoid *valuep, sb4 value_sz, ub2 dty, - dvoid *indp, ub2 *alenp, ub2 *rcodep, - ub4 maxarr_len, ub4 *curelep, ub4 mode); - -typedef sword (*OCIBindObject_t)(OCIBind *bindp, OCIError *errhp, CONST OCIType *type, - dvoid **pgvpp, ub4 *pvszsp, dvoid **indpp, - ub4 *indszp); - -typedef sword (*OCIBindDynamic_t)(OCIBind *bindp, OCIError *errhp, dvoid *ictxp, - OCICallbackInBind icbfp, dvoid *octxp, - OCICallbackOutBind ocbfp); - -typedef sword (*OCIBindArrayOfStruct_t)(OCIBind *bindp, OCIError *errhp, - ub4 pvskip, ub4 indskip, - ub4 alskip, ub4 rcskip); - -typedef sword (*OCIStmtGetPieceInfo_t)(OCIStmt *stmtp, OCIError *errhp, - dvoid **hndlpp, ub4 *typep, - ub1 *in_outp, ub4 *iterp, ub4 *idxp, - ub1 *piecep); - -typedef sword (*OCIStmtSetPieceInfo_t)(dvoid *hndlp, ub4 type, OCIError *errhp, - CONST dvoid *bufp, ub4 *alenp, ub1 piece, - CONST dvoid *indp, ub2 *rcodep); - -typedef sword (*OCIStmtExecute_t)(OCISvcCtx *svchp, OCIStmt *stmtp, OCIError *errhp, - ub4 iters, ub4 rowoff, CONST OCISnapshot *snap_in, - OCISnapshot *snap_out, ub4 mode); - -typedef sword (*OCIDefineByPos_t)(OCIStmt *stmtp, OCIDefine **defnp, OCIError *errhp, - ub4 position, dvoid *valuep, sb4 value_sz, ub2 dty, - dvoid *indp, ub2 *rlenp, ub2 *rcodep, ub4 mode); - -typedef sword (*OCIDefineObject_t)(OCIDefine *defnp, OCIError *errhp, - CONST OCIType *type, dvoid **pgvpp, - ub4 *pvszsp, dvoid **indpp, ub4 *indszp); - -typedef sword (*OCIDefineDynamic_t)(OCIDefine *defnp, OCIError *errhp, dvoid *octxp, - OCICallbackDefine ocbfp); - -typedef sword (*OCIDefineArrayOfStruct_t)(OCIDefine *defnp, OCIError *errhp, ub4 pvskip, - ub4 indskip, ub4 rlskip, ub4 rcskip); - -typedef sword (*OCIStmtFetch_t)(OCIStmt *stmtp, OCIError *errhp, ub4 nrows, - ub2 orientation, ub4 mode); - -typedef sword (*OCIStmtGetBindInfo_t)(OCIStmt *stmtp, OCIError *errhp, ub4 size, - ub4 startloc, - sb4 *found, text *bvnp[], ub1 bvnl[], - text *invp[], ub1 inpl[], ub1 dupl[], - OCIBind *hndl[]); - -typedef sword (*OCIDescribeAny_t)(OCISvcCtx *svchp, OCIError *errhp, - dvoid *objptr, - ub4 objnm_len, ub1 objptr_typ, ub1 info_level, - ub1 objtyp, OCIDescribe *dschp); - -typedef sword (*OCIParamGet_t)(CONST dvoid *hndlp, ub4 htype, OCIError *errhp, - dvoid **parmdpp, ub4 pos); - -typedef sword (*OCIParamSet_t)(dvoid *hdlp, ub4 htyp, OCIError *errhp, CONST dvoid *dscp, - ub4 dtyp, ub4 pos); - -typedef sword (*OCITransStart_t)(OCISvcCtx *svchp, OCIError *errhp, - uword timeout, ub4 flags ); - -typedef sword (*OCITransDetach_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags ); - -typedef sword (*OCITransCommit_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags); - -typedef sword (*OCITransRollback_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags); - -typedef sword (*OCITransPrepare_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags); - -typedef sword (*OCITransForget_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags); - -typedef sword (*OCIErrorGet_t)(dvoid *hndlp, ub4 recordno, text *sqlstate, - sb4 *errcodep, text *bufp, ub4 bufsiz, ub4 type); - -typedef sword (*OCILobAppend_t)(OCISvcCtx *svchp, OCIError *errhp, - OCILobLocator *dst_locp, - OCILobLocator *src_locp); - -typedef sword (*OCILobAssign_t)(OCIEnv *envhp, OCIError *errhp, - CONST OCILobLocator *src_locp, - OCILobLocator **dst_locpp); - -typedef sword (*OCILobCharSetForm_t)(OCIEnv *envhp, OCIError *errhp, - CONST OCILobLocator *locp, ub1 *csfrm); - -typedef sword (*OCILobCharSetId_t)(OCIEnv *envhp, OCIError *errhp, - CONST OCILobLocator *locp, ub2 *csid); - -typedef sword (*OCILobCopy_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *dst_locp, - OCILobLocator *src_locp, ub4 amount, ub4 dst_offset, - ub4 src_offset); - -typedef sword (*OCILobDisableBuffering_t)(OCISvcCtx *svchp, - OCIError *errhp, - OCILobLocator *locp); - -typedef sword (*OCILobEnableBuffering_t)(OCISvcCtx *svchp, - OCIError *errhp, - OCILobLocator *locp); - -typedef sword (*OCILobErase_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, - ub4 *amount, ub4 offset); - -typedef sword (*OCILobFileClose_t)(OCISvcCtx *svchp, OCIError *errhp, - OCILobLocator *filep); - -typedef sword (*OCILobFileCloseAll_t)(OCISvcCtx *svchp, OCIError *errhp); - -typedef sword (*OCILobFileExists_t)(OCISvcCtx *svchp, OCIError *errhp, - OCILobLocator *filep, - boolean *flag); - -typedef sword (*OCILobFileGetName_t)(OCIEnv *envhp, OCIError *errhp, - CONST OCILobLocator *filep, - text *dir_alias, ub2 *d_length, - text *filename, ub2 *f_length); - -typedef sword (*OCILobFileIsOpen_t)(OCISvcCtx *svchp, OCIError *errhp, - OCILobLocator *filep, - boolean *flag); - -typedef sword (*OCILobFileOpen_t)(OCISvcCtx *svchp, OCIError *errhp, - OCILobLocator *filep, - ub1 mode); - -typedef sword (*OCILobFileSetName_t)(OCIEnv *envhp, OCIError *errhp, - OCILobLocator **filepp, - CONST text *dir_alias, ub2 d_length, - CONST text *filename, ub2 f_length); - -typedef sword (*OCILobFlushBuffer_t)(OCISvcCtx *svchp, - OCIError *errhp, - OCILobLocator *locp, - ub4 flag); - -typedef sword (*OCILobGetLength_t)(OCISvcCtx *svchp, OCIError *errhp, - OCILobLocator *locp, - ub4 *lenp); - -typedef sword (*OCILobIsEqual_t)(OCIEnv *envhp, CONST OCILobLocator *x, - CONST OCILobLocator *y, - boolean *is_equal); - -typedef sword (*OCILobLoadFromFile_t)(OCISvcCtx *svchp, OCIError *errhp, - OCILobLocator *dst_locp, - OCILobLocator *src_filep, - ub4 amount, ub4 dst_offset, - ub4 src_offset); - -typedef sword (*OCILobLocatorIsInit_t)(OCIEnv *envhp, OCIError *errhp, - CONST OCILobLocator *locp, - boolean *is_initialized); - -typedef sword (*OCILobRead_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, - ub4 *amtp, ub4 offset, dvoid *bufp, ub4 bufl, - dvoid *ctxp, sb4 (*cbfp)(dvoid *ctxp, - CONST dvoid *bufp, - ub4 len, - ub1 piece), - ub2 csid, ub1 csfrm); - -typedef sword (*OCILobRead2_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, - oraub8 *byte_amtp, oraub8 *char_amtp, oraub8 offset, dvoid *bufp, oraub8 bufl, - ub1 piece, dvoid *ctxp, sb4 (*cbfp)(dvoid *ctxp, - CONST dvoid *bufp, - oraub8 len, ub1 piecep, - dvoid **changed_bufpp,oraub8 *changed_lenp), - ub2 csid, ub1 csfrm); - -typedef sword (*OCILobTrim_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, - ub4 newlen); - -typedef sword (*OCILobWrite_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, - ub4 *amtp, ub4 offset, dvoid *bufp, ub4 buflen, - ub1 piece, dvoid *ctxp, - sb4 (*cbfp)(dvoid *ctxp, - dvoid *bufp, - ub4 *len, - ub1 *piece), - ub2 csid, ub1 csfrm); - -typedef sword (*OCILobWrite2_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, - oraub8 *byte_amtp, oraub8 *char_amtp, oraub8 offset, - void *bufp, oraub8 buflen, ub1 piece, void *ctxp, - OCICallbackLobWrite2 cbfp, ub2 csid, ub1 csfrm); - -typedef sword (*OCIBreak_t)(dvoid *hndlp, OCIError *errhp); - -typedef sword (*OCIReset_t)(dvoid *hndlp, OCIError *errhp); - -typedef sword (*OCIServerVersion_t)(dvoid *hndlp, OCIError *errhp, text *bufp, - ub4 bufsz, - ub1 hndltype); - - -typedef sword (*OCIAttrGet_t)(CONST dvoid *trgthndlp, ub4 trghndltyp, - dvoid *attributep, ub4 *sizep, ub4 attrtype, - OCIError *errhp); - -typedef sword (*OCIAttrSet_t)(dvoid *trgthndlp, ub4 trghndltyp, dvoid *attributep, - ub4 size, ub4 attrtype, OCIError *errhp); - -typedef sword (*OCISvcCtxToLda_t)(OCISvcCtx *svchp, OCIError *errhp, Lda_Def *ldap); - -typedef sword (*OCILdaToSvcCtx_t)(OCISvcCtx **svchpp, OCIError *errhp, Lda_Def *ldap); - -typedef sword (*OCIResultSetToStmt_t)(OCIResult *rsetdp, OCIError *errhp); - - -// 8.1.x (8i) calls -typedef sword (*OCIEnvCreate_t)(OCIEnv **envp, ub4 mode, dvoid *ctxp, - dvoid *(*malocfp)(dvoid *ctxp, size_t size), - dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize), - void (*mfreefp)(dvoid *ctxp, dvoid *memptr), - size_t xtramem_sz, dvoid **usrmempp); - -typedef sword (*OCIEnvNlsCreate_t)(OCIEnv **envhpp, ub4 mode, dvoid *ctxp, - dvoid *(*malocfp)(dvoid *ctxp, size_t size), - dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize), - void (*mfreefp)(dvoid *ctxp, dvoid *memptr), - size_t xtramemsz, dvoid **usrmempp, - ub2 charset, ub2 ncharset); - -typedef sword (*OCIDurationBegin_t)( OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, - OCIDuration parent, OCIDuration *dur ); - -typedef sword (*OCIDurationEnd_t)( OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, - OCIDuration duration ); - -typedef sword (*OCILobCreateTemporary_t)(OCISvcCtx *svchp, - OCIError *errhp, - OCILobLocator *locp, - ub2 csid, - ub1 csfrm, - ub1 lobtype, - boolean cache, - OCIDuration duration); - -typedef sword (*OCILobFreeTemporary_t)(OCISvcCtx *svchp, - OCIError *errhp, - OCILobLocator *locp); - -typedef sword (*OCILobIsTemporary_t)(OCIEnv *envp, - OCIError *errhp, - OCILobLocator *locp, - boolean *is_temporary); - -typedef sword (*OCIAQEnq_t)(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name, - OCIAQEnqOptions *enqopt, OCIAQMsgProperties *msgprop, - OCIType *payload_tdo, dvoid **payload, dvoid **payload_ind, - OCIRaw **msgid, ub4 flags); - -typedef sword (*OCIAQDeq_t)(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name, - OCIAQDeqOptions *deqopt, OCIAQMsgProperties *msgprop, - OCIType *payload_tdo, dvoid **payload, dvoid **payload_ind, - OCIRaw **msgid, ub4 flags); - -typedef sword (*OCIAQListen_t)(OCISvcCtx *svchp, OCIError *errhp, - OCIAQAgent **agent_list, ub4 num_agents, - sb4 wait, OCIAQAgent **agent, - ub4 flags); - -typedef sword (*OCIStmtFetch2_t)(OCIStmt *stmtp, OCIError *errhp, ub4 nrows, - ub2 orientation, sb4 scrollOffset, ub4 mode ); - -//--------------- Begin OCI Client Notification Interfaces ------------------ - -typedef sword (*OCISubscriptionRegister_t)(OCISvcCtx *svchp, OCISubscription **subscrhpp, - ub2 count, OCIError *errhp, ub4 mode); - -typedef sword (*OCISubscriptionPost_t)(OCISvcCtx *svchp, OCISubscription **subscrhpp, - ub2 count, OCIError *errhp, ub4 mode); - -typedef sword (*OCISubscriptionUnRegister_t)(OCISvcCtx *svchp, OCISubscription *subscrhp, - OCIError *errhp, ub4 mode); - -typedef sword (*OCISubscriptionDisable_t)(OCISubscription *subscrhp, - OCIError *errhp, ub4 mode); - -typedef sword (*OCISubscriptionEnable_t)(OCISubscription *subscrhp, - OCIError *errhp, ub4 mode); - -//------------------- End OCI Publish/Subscribe Interfaces ------------------ - - -typedef sword (*OCIDateTimeConstruct_t)( dvoid *hndl, - OCIError *err, OCIDateTime *datetime, - sb2 year, ub1 month, ub1 day, - ub1 hour, ub1 min, ub1 sec, ub4 fsec, - OraText *timezone, size_t timezone_length); - -typedef sword (*OCIDateTimeGetDate_t)(dvoid *hndl, - OCIError *err, CONST OCIDateTime *datetime, - sb2 *year, ub1 *month, ub1 *day); - -typedef sword (*OCIDateTimeGetTime_t)(dvoid *hndl, - OCIError *err, OCIDateTime *datetime, - ub1 *hour, ub1 *min, ub1 *sec, ub4 *fsec); - - +// ora8API.h +// +////////////////////////////////////////////////////////////////////// + +#if !defined(__ORA8API_H__) +#define __ORA8API_H__ + +#include "SQLAPI.h" + +// API header(s) +#include + +extern long g_nORA8DLLVersionLoaded; + +extern void AddORA8Support(const SAConnection * pCon); +extern void ReleaseORA8Support(); + +// 8.0.x calls +typedef sword (*OCIInitialize_t)(ub4 mode, dvoid *ctxp, + dvoid *(*malocfp)(dvoid *ctxp, size_t size), + dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize), + void (*mfreefp)(dvoid *ctxp, dvoid *memptr) ); + +typedef sword (*OCIHandleAlloc_t)(CONST dvoid *parenth, dvoid **hndlpp, CONST ub4 type, + CONST size_t xtramem_sz, dvoid **usrmempp); + +typedef sword (*OCIHandleFree_t)(dvoid *hndlp, CONST ub4 type); + + +typedef sword (*OCIDescriptorAlloc_t)(CONST dvoid *parenth, dvoid **descpp, CONST ub4 type, + CONST size_t xtramem_sz, dvoid **usrmempp); + +typedef sword (*OCIDescriptorFree_t)(dvoid *descp, CONST ub4 type); + +typedef sword (*OCIEnvInit_t)(OCIEnv **envp, ub4 mode, + size_t xtramem_sz, dvoid **usrmempp); + +typedef sword (*OCIServerAttach_t)(OCIServer *srvhp, OCIError *errhp, + CONST text *dblink, sb4 dblink_len, ub4 mode); + +typedef sword (*OCIServerDetach_t)(OCIServer *srvhp, OCIError *errhp, ub4 mode); + +typedef sword (*OCISessionBegin_t)(OCISvcCtx *svchp, OCIError *errhp, OCISession *usrhp, + ub4 credt, ub4 mode); + +typedef sword (*OCISessionEnd_t)(OCISvcCtx *svchp, OCIError *errhp, OCISession *usrhp, + ub4 mode); + +typedef sword (*OCILogon_t)(OCIEnv *envhp, OCIError *errhp, OCISvcCtx **svchp, + CONST text *username, ub4 uname_len, + CONST text *password, ub4 passwd_len, + CONST text *dbname, ub4 dbname_len); + +typedef sword (*OCILogoff_t)(OCISvcCtx *svchp, OCIError *errhp); + + +typedef sword (*OCIPasswordChange_t)(OCISvcCtx *svchp, OCIError *errhp, + CONST text *user_name, ub4 usernm_len, + CONST text *opasswd, ub4 opasswd_len, + CONST text *npasswd, ub4 npasswd_len, ub4 mode); + +typedef sword (*OCIStmtPrepare_t)(OCIStmt *stmtp, OCIError *errhp, CONST text *stmt, + ub4 stmt_len, ub4 language, ub4 mode); + +typedef sword (*OCIBindByPos_t)(OCIStmt *stmtp, OCIBind **bindp, OCIError *errhp, + ub4 position, dvoid *valuep, sb4 value_sz, + ub2 dty, dvoid *indp, ub2 *alenp, ub2 *rcodep, + ub4 maxarr_len, ub4 *curelep, ub4 mode); + +typedef sword (*OCIBindByName_t)(OCIStmt *stmtp, OCIBind **bindp, OCIError *errhp, + CONST text *placeholder, sb4 placeh_len, + dvoid *valuep, sb4 value_sz, ub2 dty, + dvoid *indp, ub2 *alenp, ub2 *rcodep, + ub4 maxarr_len, ub4 *curelep, ub4 mode); + +typedef sword (*OCIBindObject_t)(OCIBind *bindp, OCIError *errhp, CONST OCIType *type, + dvoid **pgvpp, ub4 *pvszsp, dvoid **indpp, + ub4 *indszp); + +typedef sword (*OCIBindDynamic_t)(OCIBind *bindp, OCIError *errhp, dvoid *ictxp, + OCICallbackInBind icbfp, dvoid *octxp, + OCICallbackOutBind ocbfp); + +typedef sword (*OCIBindArrayOfStruct_t)(OCIBind *bindp, OCIError *errhp, + ub4 pvskip, ub4 indskip, + ub4 alskip, ub4 rcskip); + +typedef sword (*OCIStmtGetPieceInfo_t)(OCIStmt *stmtp, OCIError *errhp, + dvoid **hndlpp, ub4 *typep, + ub1 *in_outp, ub4 *iterp, ub4 *idxp, + ub1 *piecep); + +typedef sword (*OCIStmtSetPieceInfo_t)(dvoid *hndlp, ub4 type, OCIError *errhp, + CONST dvoid *bufp, ub4 *alenp, ub1 piece, + CONST dvoid *indp, ub2 *rcodep); + +typedef sword (*OCIStmtExecute_t)(OCISvcCtx *svchp, OCIStmt *stmtp, OCIError *errhp, + ub4 iters, ub4 rowoff, CONST OCISnapshot *snap_in, + OCISnapshot *snap_out, ub4 mode); + +typedef sword (*OCIDefineByPos_t)(OCIStmt *stmtp, OCIDefine **defnp, OCIError *errhp, + ub4 position, dvoid *valuep, sb4 value_sz, ub2 dty, + dvoid *indp, ub2 *rlenp, ub2 *rcodep, ub4 mode); + +typedef sword (*OCIDefineObject_t)(OCIDefine *defnp, OCIError *errhp, + CONST OCIType *type, dvoid **pgvpp, + ub4 *pvszsp, dvoid **indpp, ub4 *indszp); + +typedef sword (*OCIDefineDynamic_t)(OCIDefine *defnp, OCIError *errhp, dvoid *octxp, + OCICallbackDefine ocbfp); + +typedef sword (*OCIDefineArrayOfStruct_t)(OCIDefine *defnp, OCIError *errhp, ub4 pvskip, + ub4 indskip, ub4 rlskip, ub4 rcskip); + +typedef sword (*OCIStmtFetch_t)(OCIStmt *stmtp, OCIError *errhp, ub4 nrows, + ub2 orientation, ub4 mode); + +typedef sword (*OCIStmtGetBindInfo_t)(OCIStmt *stmtp, OCIError *errhp, ub4 size, + ub4 startloc, + sb4 *found, text *bvnp[], ub1 bvnl[], + text *invp[], ub1 inpl[], ub1 dupl[], + OCIBind *hndl[]); + +typedef sword (*OCIDescribeAny_t)(OCISvcCtx *svchp, OCIError *errhp, + dvoid *objptr, + ub4 objnm_len, ub1 objptr_typ, ub1 info_level, + ub1 objtyp, OCIDescribe *dschp); + +typedef sword (*OCIParamGet_t)(CONST dvoid *hndlp, ub4 htype, OCIError *errhp, + dvoid **parmdpp, ub4 pos); + +typedef sword (*OCIParamSet_t)(dvoid *hdlp, ub4 htyp, OCIError *errhp, CONST dvoid *dscp, + ub4 dtyp, ub4 pos); + +typedef sword (*OCITransStart_t)(OCISvcCtx *svchp, OCIError *errhp, + uword timeout, ub4 flags ); + +typedef sword (*OCITransDetach_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags ); + +typedef sword (*OCITransCommit_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags); + +typedef sword (*OCITransRollback_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags); + +typedef sword (*OCITransPrepare_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags); + +typedef sword (*OCITransForget_t)(OCISvcCtx *svchp, OCIError *errhp, ub4 flags); + +typedef sword (*OCIErrorGet_t)(dvoid *hndlp, ub4 recordno, text *sqlstate, + sb4 *errcodep, text *bufp, ub4 bufsiz, ub4 type); + +typedef sword (*OCILobAppend_t)(OCISvcCtx *svchp, OCIError *errhp, + OCILobLocator *dst_locp, + OCILobLocator *src_locp); + +typedef sword (*OCILobAssign_t)(OCIEnv *envhp, OCIError *errhp, + CONST OCILobLocator *src_locp, + OCILobLocator **dst_locpp); + +typedef sword (*OCILobCharSetForm_t)(OCIEnv *envhp, OCIError *errhp, + CONST OCILobLocator *locp, ub1 *csfrm); + +typedef sword (*OCILobCharSetId_t)(OCIEnv *envhp, OCIError *errhp, + CONST OCILobLocator *locp, ub2 *csid); + +typedef sword (*OCILobCopy_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *dst_locp, + OCILobLocator *src_locp, ub4 amount, ub4 dst_offset, + ub4 src_offset); + +typedef sword (*OCILobDisableBuffering_t)(OCISvcCtx *svchp, + OCIError *errhp, + OCILobLocator *locp); + +typedef sword (*OCILobEnableBuffering_t)(OCISvcCtx *svchp, + OCIError *errhp, + OCILobLocator *locp); + +typedef sword (*OCILobErase_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, + ub4 *amount, ub4 offset); + +typedef sword (*OCILobFileClose_t)(OCISvcCtx *svchp, OCIError *errhp, + OCILobLocator *filep); + +typedef sword (*OCILobFileCloseAll_t)(OCISvcCtx *svchp, OCIError *errhp); + +typedef sword (*OCILobFileExists_t)(OCISvcCtx *svchp, OCIError *errhp, + OCILobLocator *filep, + boolean *flag); + +typedef sword (*OCILobFileGetName_t)(OCIEnv *envhp, OCIError *errhp, + CONST OCILobLocator *filep, + text *dir_alias, ub2 *d_length, + text *filename, ub2 *f_length); + +typedef sword (*OCILobFileIsOpen_t)(OCISvcCtx *svchp, OCIError *errhp, + OCILobLocator *filep, + boolean *flag); + +typedef sword (*OCILobFileOpen_t)(OCISvcCtx *svchp, OCIError *errhp, + OCILobLocator *filep, + ub1 mode); + +typedef sword (*OCILobFileSetName_t)(OCIEnv *envhp, OCIError *errhp, + OCILobLocator **filepp, + CONST text *dir_alias, ub2 d_length, + CONST text *filename, ub2 f_length); + +typedef sword (*OCILobFlushBuffer_t)(OCISvcCtx *svchp, + OCIError *errhp, + OCILobLocator *locp, + ub4 flag); + +typedef sword (*OCILobGetLength_t)(OCISvcCtx *svchp, OCIError *errhp, + OCILobLocator *locp, + ub4 *lenp); + +typedef sword (*OCILobIsEqual_t)(OCIEnv *envhp, CONST OCILobLocator *x, + CONST OCILobLocator *y, + boolean *is_equal); + +typedef sword (*OCILobLoadFromFile_t)(OCISvcCtx *svchp, OCIError *errhp, + OCILobLocator *dst_locp, + OCILobLocator *src_filep, + ub4 amount, ub4 dst_offset, + ub4 src_offset); + +typedef sword (*OCILobLocatorIsInit_t)(OCIEnv *envhp, OCIError *errhp, + CONST OCILobLocator *locp, + boolean *is_initialized); + +typedef sword (*OCILobRead_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, + ub4 *amtp, ub4 offset, dvoid *bufp, ub4 bufl, + dvoid *ctxp, sb4 (*cbfp)(dvoid *ctxp, + CONST dvoid *bufp, + ub4 len, + ub1 piece), + ub2 csid, ub1 csfrm); + +typedef sword (*OCILobRead2_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, + oraub8 *byte_amtp, oraub8 *char_amtp, oraub8 offset, dvoid *bufp, oraub8 bufl, + ub1 piece, dvoid *ctxp, sb4 (*cbfp)(dvoid *ctxp, + CONST dvoid *bufp, + oraub8 len, ub1 piecep, + dvoid **changed_bufpp,oraub8 *changed_lenp), + ub2 csid, ub1 csfrm); + +typedef sword (*OCILobTrim_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, + ub4 newlen); + +typedef sword (*OCILobWrite_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, + ub4 *amtp, ub4 offset, dvoid *bufp, ub4 buflen, + ub1 piece, dvoid *ctxp, + sb4 (*cbfp)(dvoid *ctxp, + dvoid *bufp, + ub4 *len, + ub1 *piece), + ub2 csid, ub1 csfrm); + +typedef sword (*OCILobWrite2_t)(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp, + oraub8 *byte_amtp, oraub8 *char_amtp, oraub8 offset, + void *bufp, oraub8 buflen, ub1 piece, void *ctxp, + OCICallbackLobWrite2 cbfp, ub2 csid, ub1 csfrm); + +typedef sword (*OCIBreak_t)(dvoid *hndlp, OCIError *errhp); + +typedef sword (*OCIReset_t)(dvoid *hndlp, OCIError *errhp); + +typedef sword (*OCIServerVersion_t)(dvoid *hndlp, OCIError *errhp, text *bufp, + ub4 bufsz, + ub1 hndltype); + + +typedef sword (*OCIAttrGet_t)(CONST dvoid *trgthndlp, ub4 trghndltyp, + dvoid *attributep, ub4 *sizep, ub4 attrtype, + OCIError *errhp); + +typedef sword (*OCIAttrSet_t)(dvoid *trgthndlp, ub4 trghndltyp, dvoid *attributep, + ub4 size, ub4 attrtype, OCIError *errhp); + +typedef sword (*OCISvcCtxToLda_t)(OCISvcCtx *svchp, OCIError *errhp, Lda_Def *ldap); + +typedef sword (*OCILdaToSvcCtx_t)(OCISvcCtx **svchpp, OCIError *errhp, Lda_Def *ldap); + +typedef sword (*OCIResultSetToStmt_t)(OCIResult *rsetdp, OCIError *errhp); + + +// 8.1.x (8i) calls +typedef sword (*OCIEnvCreate_t)(OCIEnv **envp, ub4 mode, dvoid *ctxp, + dvoid *(*malocfp)(dvoid *ctxp, size_t size), + dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize), + void (*mfreefp)(dvoid *ctxp, dvoid *memptr), + size_t xtramem_sz, dvoid **usrmempp); + +typedef sword (*OCIEnvNlsCreate_t)(OCIEnv **envhpp, ub4 mode, dvoid *ctxp, + dvoid *(*malocfp)(dvoid *ctxp, size_t size), + dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize), + void (*mfreefp)(dvoid *ctxp, dvoid *memptr), + size_t xtramemsz, dvoid **usrmempp, + ub2 charset, ub2 ncharset); + +typedef sword (*OCIDurationBegin_t)( OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, + OCIDuration parent, OCIDuration *dur ); + +typedef sword (*OCIDurationEnd_t)( OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, + OCIDuration duration ); + +typedef sword (*OCILobCreateTemporary_t)(OCISvcCtx *svchp, + OCIError *errhp, + OCILobLocator *locp, + ub2 csid, + ub1 csfrm, + ub1 lobtype, + boolean cache, + OCIDuration duration); + +typedef sword (*OCILobFreeTemporary_t)(OCISvcCtx *svchp, + OCIError *errhp, + OCILobLocator *locp); + +typedef sword (*OCILobIsTemporary_t)(OCIEnv *envp, + OCIError *errhp, + OCILobLocator *locp, + boolean *is_temporary); + +typedef sword (*OCIAQEnq_t)(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name, + OCIAQEnqOptions *enqopt, OCIAQMsgProperties *msgprop, + OCIType *payload_tdo, dvoid **payload, dvoid **payload_ind, + OCIRaw **msgid, ub4 flags); + +typedef sword (*OCIAQDeq_t)(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name, + OCIAQDeqOptions *deqopt, OCIAQMsgProperties *msgprop, + OCIType *payload_tdo, dvoid **payload, dvoid **payload_ind, + OCIRaw **msgid, ub4 flags); + +typedef sword (*OCIAQListen_t)(OCISvcCtx *svchp, OCIError *errhp, + OCIAQAgent **agent_list, ub4 num_agents, + sb4 wait, OCIAQAgent **agent, + ub4 flags); + +typedef sword (*OCIStmtFetch2_t)(OCIStmt *stmtp, OCIError *errhp, ub4 nrows, + ub2 orientation, sb4 scrollOffset, ub4 mode ); + +//--------------- Begin OCI Client Notification Interfaces ------------------ + +typedef sword (*OCISubscriptionRegister_t)(OCISvcCtx *svchp, OCISubscription **subscrhpp, + ub2 count, OCIError *errhp, ub4 mode); + +typedef sword (*OCISubscriptionPost_t)(OCISvcCtx *svchp, OCISubscription **subscrhpp, + ub2 count, OCIError *errhp, ub4 mode); + +typedef sword (*OCISubscriptionUnRegister_t)(OCISvcCtx *svchp, OCISubscription *subscrhp, + OCIError *errhp, ub4 mode); + +typedef sword (*OCISubscriptionDisable_t)(OCISubscription *subscrhp, + OCIError *errhp, ub4 mode); + +typedef sword (*OCISubscriptionEnable_t)(OCISubscription *subscrhp, + OCIError *errhp, ub4 mode); + +//------------------- End OCI Publish/Subscribe Interfaces ------------------ + + +typedef sword (*OCIDateTimeConstruct_t)( dvoid *hndl, + OCIError *err, OCIDateTime *datetime, + sb2 year, ub1 month, ub1 day, + ub1 hour, ub1 min, ub1 sec, ub4 fsec, + OraText *timezone, size_t timezone_length); + +typedef sword (*OCIDateTimeGetDate_t)(dvoid *hndl, + OCIError *err, CONST OCIDateTime *datetime, + sb2 *year, ub1 *month, ub1 *day); + +typedef sword (*OCIDateTimeGetTime_t)(dvoid *hndl, + OCIError *err, OCIDateTime *datetime, + ub1 *hour, ub1 *min, ub1 *sec, ub4 *fsec); + + typedef sword (*OCIDateTimeGetTimeZoneOffset_t)(void *hndl, OCIError *err, const OCIDateTime *datetime, - sb1 *hr, sb1 *mm); - -typedef sword (*OCINlsNumericInfoGet_t)(dvoid *envhp, OCIError *errhp, sb4 *val, ub2 item); - -// API declarations -class SQLAPI_API ora8API : public saAPI -{ -public: - ora8API(); - - // 8.0.x calls - OCIInitialize_t OCIInitialize; - OCIHandleAlloc_t OCIHandleAlloc; - OCIHandleFree_t OCIHandleFree; - OCIDescriptorAlloc_t OCIDescriptorAlloc; - OCIDescriptorFree_t OCIDescriptorFree; - OCIEnvInit_t OCIEnvInit; - OCIServerAttach_t OCIServerAttach; - OCIServerDetach_t OCIServerDetach; - OCISessionBegin_t OCISessionBegin; - OCISessionEnd_t OCISessionEnd; - OCILogon_t OCILogon; - OCILogoff_t OCILogoff; - OCIPasswordChange_t OCIPasswordChange; - OCIStmtPrepare_t OCIStmtPrepare; - OCIBindByPos_t OCIBindByPos; - OCIBindByName_t OCIBindByName; - OCIBindObject_t OCIBindObject; - OCIBindDynamic_t OCIBindDynamic; - OCIBindArrayOfStruct_t OCIBindArrayOfStruct; - OCIStmtGetPieceInfo_t OCIStmtGetPieceInfo; - OCIStmtSetPieceInfo_t OCIStmtSetPieceInfo; - OCIStmtExecute_t OCIStmtExecute; - OCIDefineByPos_t OCIDefineByPos; - OCIDefineObject_t OCIDefineObject; - OCIDefineDynamic_t OCIDefineDynamic; - OCIDefineArrayOfStruct_t OCIDefineArrayOfStruct; - OCIStmtFetch_t OCIStmtFetch; - OCIStmtGetBindInfo_t OCIStmtGetBindInfo; - OCIDescribeAny_t OCIDescribeAny; - OCIParamGet_t OCIParamGet; - OCIParamSet_t OCIParamSet; - OCITransStart_t OCITransStart; - OCITransDetach_t OCITransDetach; - OCITransCommit_t OCITransCommit; - OCITransRollback_t OCITransRollback; - OCITransPrepare_t OCITransPrepare; - OCITransForget_t OCITransForget; - OCIErrorGet_t OCIErrorGet; - OCILobAppend_t OCILobAppend; - OCILobAssign_t OCILobAssign; - OCILobCharSetForm_t OCILobCharSetForm; - OCILobCharSetId_t OCILobCharSetId; - OCILobCopy_t OCILobCopy; - OCILobDisableBuffering_t OCILobDisableBuffering; - OCILobEnableBuffering_t OCILobEnableBuffering; - OCILobErase_t OCILobErase; - OCILobFileClose_t OCILobFileClose; - OCILobFileCloseAll_t OCILobFileCloseAll; - OCILobFileExists_t OCILobFileExists; - OCILobFileGetName_t OCILobFileGetName; - OCILobFileIsOpen_t OCILobFileIsOpen; - OCILobFileOpen_t OCILobFileOpen; - OCILobFileSetName_t OCILobFileSetName; - OCILobFlushBuffer_t OCILobFlushBuffer; - OCILobGetLength_t OCILobGetLength; - OCILobIsEqual_t OCILobIsEqual; - OCILobLoadFromFile_t OCILobLoadFromFile; - OCILobLocatorIsInit_t OCILobLocatorIsInit; - OCILobRead_t OCILobRead; - OCILobRead2_t OCILobRead2; - OCILobTrim_t OCILobTrim; - OCILobWrite_t OCILobWrite; - OCILobWrite2_t OCILobWrite2; - OCIBreak_t OCIBreak; - OCIReset_t OCIReset; - OCIServerVersion_t OCIServerVersion; - OCIAttrGet_t OCIAttrGet; - OCIAttrSet_t OCIAttrSet; - OCISvcCtxToLda_t OCISvcCtxToLda; - OCILdaToSvcCtx_t OCILdaToSvcCtx; - OCIResultSetToStmt_t OCIResultSetToStmt; - - // 8.1.x (8i) calls - OCIEnvCreate_t OCIEnvCreate; - OCIEnvNlsCreate_t OCIEnvNlsCreate; - OCIDurationBegin_t OCIDurationBegin; - OCIDurationEnd_t OCIDurationEnd; - OCILobCreateTemporary_t OCILobCreateTemporary; - OCILobFreeTemporary_t OCILobFreeTemporary; - OCILobIsTemporary_t OCILobIsTemporary; - - OCIAQEnq_t OCIAQEnq; - OCIAQDeq_t OCIAQDeq; - OCIAQListen_t OCIAQListen; - OCISubscriptionRegister_t OCISubscriptionRegister; - OCISubscriptionPost_t OCISubscriptionPost; - OCISubscriptionUnRegister_t OCISubscriptionUnRegister; - OCISubscriptionDisable_t OCISubscriptionDisable; - OCISubscriptionEnable_t OCISubscriptionEnable; - - OCIDateTimeConstruct_t OCIDateTimeConstruct; - OCIDateTimeGetDate_t OCIDateTimeGetDate; - OCIDateTimeGetTime_t OCIDateTimeGetTime; - OCIDateTimeGetTimeZoneOffset_t OCIDateTimeGetTimeZoneOffset; - - OCINlsNumericInfoGet_t OCINlsNumericInfoGet; - - OCIStmtFetch2_t OCIStmtFetch2; -}; - -class SQLAPI_API ora8ConnectionHandles : public saConnectionHandles -{ -public: - ora8ConnectionHandles(); - - OCIEnv *m_pOCIEnv; - OCIError *m_pOCIError; - OCISvcCtx *m_pOCISvcCtx; - OCIServer *m_pOCIServer; - OCISession *m_pOCISession; -}; - -class SQLAPI_API ora8CommandHandles : public saCommandHandles -{ -public: - ora8CommandHandles(); - - OCIStmt *m_pOCIStmt; - OCIError *m_pOCIError; // cursor owned error handle -}; - -class SQLAPI_API ora8ExternalConnection -{ - bool m_bAttached; - SAConnection *m_pCon; - -public: - OCIEnv *m_pOCIEnv; - OCISvcCtx *m_pOCISvcCtx; - -public: - ora8ExternalConnection( - SAConnection *pCon, - OCIEnv *pOCIEnv, - OCISvcCtx *pOCISvcCtx); - void Attach(); - void Detach(); - ~ora8ExternalConnection(); -}; - -extern ora8API g_ora8API; - -#endif // !defined(__ORA8API_H__) + sb1 *hr, sb1 *mm); + +typedef sword (*OCINlsNumericInfoGet_t)(dvoid *envhp, OCIError *errhp, sb4 *val, ub2 item); + +/*----------------- Connection Pooling prototypes ---------------------------*/ +typedef sword (*OCIConnectionPoolCreate_t)(OCIEnv *envhp, OCIError *errhp, OCICPool *poolhp, + OraText **poolName, sb4 *poolNameLen, + const OraText *dblink, sb4 dblinkLen, + ub4 connMin, ub4 connMax, ub4 connIncr, + const OraText *poolUserName, sb4 poolUserLen, + const OraText *poolPassword, sb4 poolPassLen, + ub4 mode); + +typedef sword (*OCIConnectionPoolDestroy_t)(OCICPool *poolhp, + OCIError *errhp, ub4 mode); + +/*----------------- OCILobGetLength2 prototypes ---------------------------*/ +typedef sword (*OCILobGetLength2_t)(OCISvcCtx *svchp, OCIError *errhp, + OCILobLocator *locp, oraub8 *lenp); + +class ora8API; + +class SQLAPI_API ora8ConnectionPool +{ +public: + ora8ConnectionPool(); + +private: + // disable copy constructor + ora8ConnectionPool(const ora8ConnectionPool&); + // disable assignment operator + ora8ConnectionPool &operator = (const ora8ConnectionPool &); + +public: + OCICPool *poolhp; + OraText *poolName; + sb4 poolNameLen; +}; + +class SQLAPI_API ora8ConnectionPools +{ + int m_nCount; + ora8ConnectionPool **m_pPools; + +private: + // disable copy constructor + ora8ConnectionPools(const ora8ConnectionPools &); + // disable assignment operator + ora8ConnectionPools &operator = (const ora8ConnectionPools &); + +public: + ora8ConnectionPools(); + + ora8ConnectionPool& operator[](int poolIndex); + void Close(ora8API& api); +}; + +// API declarations +class SQLAPI_API ora8API : public saAPI +{ +public: + ora8API(); + + // 8.0.x calls + OCIInitialize_t OCIInitialize; + OCIHandleAlloc_t OCIHandleAlloc; + OCIHandleFree_t OCIHandleFree; + OCIDescriptorAlloc_t OCIDescriptorAlloc; + OCIDescriptorFree_t OCIDescriptorFree; + OCIEnvInit_t OCIEnvInit; + OCIServerAttach_t OCIServerAttach; + OCIServerDetach_t OCIServerDetach; + OCISessionBegin_t OCISessionBegin; + OCISessionEnd_t OCISessionEnd; + OCILogon_t OCILogon; + OCILogoff_t OCILogoff; + OCIPasswordChange_t OCIPasswordChange; + OCIStmtPrepare_t OCIStmtPrepare; + OCIBindByPos_t OCIBindByPos; + OCIBindByName_t OCIBindByName; + OCIBindObject_t OCIBindObject; + OCIBindDynamic_t OCIBindDynamic; + OCIBindArrayOfStruct_t OCIBindArrayOfStruct; + OCIStmtGetPieceInfo_t OCIStmtGetPieceInfo; + OCIStmtSetPieceInfo_t OCIStmtSetPieceInfo; + OCIStmtExecute_t OCIStmtExecute; + OCIDefineByPos_t OCIDefineByPos; + OCIDefineObject_t OCIDefineObject; + OCIDefineDynamic_t OCIDefineDynamic; + OCIDefineArrayOfStruct_t OCIDefineArrayOfStruct; + OCIStmtFetch_t OCIStmtFetch; + OCIStmtGetBindInfo_t OCIStmtGetBindInfo; + OCIDescribeAny_t OCIDescribeAny; + OCIParamGet_t OCIParamGet; + OCIParamSet_t OCIParamSet; + OCITransStart_t OCITransStart; + OCITransDetach_t OCITransDetach; + OCITransCommit_t OCITransCommit; + OCITransRollback_t OCITransRollback; + OCITransPrepare_t OCITransPrepare; + OCITransForget_t OCITransForget; + OCIErrorGet_t OCIErrorGet; + OCILobAppend_t OCILobAppend; + OCILobAssign_t OCILobAssign; + OCILobCharSetForm_t OCILobCharSetForm; + OCILobCharSetId_t OCILobCharSetId; + OCILobCopy_t OCILobCopy; + OCILobDisableBuffering_t OCILobDisableBuffering; + OCILobEnableBuffering_t OCILobEnableBuffering; + OCILobErase_t OCILobErase; + OCILobFileClose_t OCILobFileClose; + OCILobFileCloseAll_t OCILobFileCloseAll; + OCILobFileExists_t OCILobFileExists; + OCILobFileGetName_t OCILobFileGetName; + OCILobFileIsOpen_t OCILobFileIsOpen; + OCILobFileOpen_t OCILobFileOpen; + OCILobFileSetName_t OCILobFileSetName; + OCILobFlushBuffer_t OCILobFlushBuffer; + OCILobGetLength_t OCILobGetLength; + OCILobGetLength2_t OCILobGetLength2; + OCILobIsEqual_t OCILobIsEqual; + OCILobLoadFromFile_t OCILobLoadFromFile; + OCILobLocatorIsInit_t OCILobLocatorIsInit; + OCILobRead_t OCILobRead; + OCILobRead2_t OCILobRead2; + OCILobTrim_t OCILobTrim; + OCILobWrite_t OCILobWrite; + OCILobWrite2_t OCILobWrite2; + OCIBreak_t OCIBreak; + OCIReset_t OCIReset; + OCIServerVersion_t OCIServerVersion; + OCIAttrGet_t OCIAttrGet; + OCIAttrSet_t OCIAttrSet; + OCISvcCtxToLda_t OCISvcCtxToLda; + OCILdaToSvcCtx_t OCILdaToSvcCtx; + OCIResultSetToStmt_t OCIResultSetToStmt; + + // 8.1.x (8i) calls + OCIEnvCreate_t OCIEnvCreate; + OCIEnvNlsCreate_t OCIEnvNlsCreate; + OCIDurationBegin_t OCIDurationBegin; + OCIDurationEnd_t OCIDurationEnd; + OCILobCreateTemporary_t OCILobCreateTemporary; + OCILobFreeTemporary_t OCILobFreeTemporary; + OCILobIsTemporary_t OCILobIsTemporary; + + OCIAQEnq_t OCIAQEnq; + OCIAQDeq_t OCIAQDeq; + OCIAQListen_t OCIAQListen; + OCISubscriptionRegister_t OCISubscriptionRegister; + OCISubscriptionPost_t OCISubscriptionPost; + OCISubscriptionUnRegister_t OCISubscriptionUnRegister; + OCISubscriptionDisable_t OCISubscriptionDisable; + OCISubscriptionEnable_t OCISubscriptionEnable; + + OCIDateTimeConstruct_t OCIDateTimeConstruct; + OCIDateTimeGetDate_t OCIDateTimeGetDate; + OCIDateTimeGetTime_t OCIDateTimeGetTime; + OCIDateTimeGetTimeZoneOffset_t OCIDateTimeGetTimeZoneOffset; + + OCINlsNumericInfoGet_t OCINlsNumericInfoGet; + + OCIStmtFetch2_t OCIStmtFetch2; + + // Conection pooling + OCIConnectionPoolCreate_t OCIConnectionPoolCreate; + OCIConnectionPoolDestroy_t OCIConnectionPoolDestroy; + + ora8ConnectionPools connecionPools; + OCIEnv *envhp; +}; + +class SQLAPI_API ora8ConnectionHandles : public saConnectionHandles +{ +public: + ora8ConnectionHandles(); + + OCIEnv *m_pOCIEnv; + OCIError *m_pOCIError; + OCISvcCtx *m_pOCISvcCtx; + OCIServer *m_pOCIServer; + OCISession *m_pOCISession; +}; + +class SQLAPI_API ora8CommandHandles : public saCommandHandles +{ +public: + ora8CommandHandles(); + + OCIStmt *m_pOCIStmt; + OCIError *m_pOCIError; // cursor owned error handle +}; + +class SQLAPI_API ora8ExternalConnection +{ + bool m_bAttached; + SAConnection *m_pCon; + +public: + OCIEnv *m_pOCIEnv; + OCISvcCtx *m_pOCISvcCtx; + +public: + ora8ExternalConnection( + SAConnection *pCon, + OCIEnv *pOCIEnv, + OCISvcCtx *pOCISvcCtx); + void Attach(); + void Detach(); + ~ora8ExternalConnection(); +}; + +extern ora8API g_ora8API; + +#endif // !defined(__ORA8API_H__) diff --git a/libraries/SQLAPI/include/pgAPI.h b/libraries/SQLAPI/include/pgAPI.h index c723308da..e017f4744 100644 --- a/libraries/SQLAPI/include/pgAPI.h +++ b/libraries/SQLAPI/include/pgAPI.h @@ -111,14 +111,14 @@ typedef void (*PQprintTuples_t)(const PGresult *res, typedef int (*lo_open_t)(PGconn *conn, Oid lobjId, int mode); typedef int (*lo_close_t)(PGconn *conn, int fd); typedef int (*lo_read_t)(PGconn *conn, int fd, char *buf, size_t len); -typedef int (*lo_write_t)(PGconn *conn, int fd, char *buf, size_t len); +typedef int (*lo_write_t)(PGconn *conn, int fd, const char *buf, size_t len); typedef int (*lo_lseek_t)(PGconn *conn, int fd, int offset, int whence); typedef Oid (*lo_creat_t)(PGconn *conn, int mode); typedef int (*lo_tell_t)(PGconn *conn, int fd); typedef int (*lo_unlink_t)(PGconn *conn, Oid lobjId); typedef Oid (*lo_import_t)(PGconn *conn, const char *filename); typedef int (*lo_export_t)(PGconn *conn, Oid lobjId, const char *filename); -typedef int (*PQmblen_t)(const unsigned char *s, int encoding); +typedef int (*PQmblen_t)(const char *s, int encoding); typedef int (*PQenv2encoding_t)(void); // new @@ -137,7 +137,7 @@ typedef unsigned char* (*PQunescapeBytea_t)(const unsigned char *strtext, /* These forms are deprecated! */ typedef size_t (*PQescapeString_t)(char *to, const char *from, size_t length); -typedef char* (*PQescapeBytea_t)(const unsigned char *from, size_t from_length, +typedef unsigned char* (*PQescapeBytea_t)(const unsigned char *from, size_t from_length, size_t *to_length); typedef void (*PQfreemem_t)(void *ptr); @@ -147,8 +147,8 @@ typedef int (*PQputCopyEnd_t)(PGconn *conn, const char *errormsg); typedef int (*PQgetCopyData_t)(PGconn *conn, char **buffer, int async); typedef PGPing (*PQping_t)(const char *conninfo); -typedef PGPing (*PQpingParams_t)(const char **keywords, - const char **values, int expand_dbname); +typedef PGPing (*PQpingParams_t)(const char *const * keywords, + const char *const * values, int expand_dbname); typedef const char* (*pg_encoding_to_char_t)(int encoding); diff --git a/libraries/SQLAPI/include/sbAPI.h b/libraries/SQLAPI/include/sbAPI.h index 121cedca6..5fb78c16c 100644 --- a/libraries/SQLAPI/include/sbAPI.h +++ b/libraries/SQLAPI/include/sbAPI.h @@ -8,8 +8,7 @@ #include "SQLAPI.h" // API header(s) -#define SQL_32BITTARG 1 -#include +#include extern long g_nSBDLLVersionLoaded; diff --git a/libraries/SQLAPI/include/sl3API.h b/libraries/SQLAPI/include/sl3API.h index c0b593d8b..2c79c0998 100644 --- a/libraries/SQLAPI/include/sl3API.h +++ b/libraries/SQLAPI/include/sl3API.h @@ -115,6 +115,12 @@ typedef void *(*sqlite3_rollback_hook_t)(sqlite3*, void(*)(void *), void*); typedef int (*sqlite3_enable_shared_cache_t)(int); typedef int (*sqlite3_release_memory_t)(int); typedef void (*sqlite3_soft_heap_limit_t)(int); +typedef int(*sqlite3_load_extension_t)( + sqlite3 *db, /* Load the extension into this database connection */ + const char *zFile, /* Name of the shared library containing extension */ + const char *zProc, /* Entry point. Derived from zFile if 0 */ + char **pzErrMsg /* Put error message here if not 0 */ + ); typedef int (*sqlite3_enable_load_extension_t)(sqlite3 *db, int onoff); typedef int (*sqlite3_auto_extension_t)(void *xEntryPoint); typedef void (*sqlite3_reset_auto_extension_t)(void); @@ -181,6 +187,9 @@ typedef void *(*sqlite3_update_hook_t)( void* ); +typedef int(*sqlite3_key_t)(sqlite3 *db, const void *pKey, int nKey); +typedef int(*sqlite3_rekey_t)(sqlite3 *db, const void *pKey, int nKey); + // API declarations class SQLAPI_API sl3API : public saAPI { @@ -240,7 +249,16 @@ public: sqlite3_update_hook_t sqlite3_update_hook; + sqlite3_load_extension_t sqlite3_load_extension; sqlite3_enable_load_extension_t sqlite3_enable_load_extension; + + sqlite3_key_t sqlite3_key; + sqlite3_rekey_t sqlite3_rekey; + + sqlite3_free_t sqlite3_free; + + sqlite3_memory_used_t sqlite3_memory_used; + sqlite3_memory_highwater_t sqlite3_memory_highwater; }; class SQLAPI_API sl3ConnectionHandles : public saConnectionHandles diff --git a/libraries/SQLAPI/include/sqlbase/sqlbase.h b/libraries/SQLAPI/include/sqlbase/sqlbase.h new file mode 100644 index 000000000..090718df7 --- /dev/null +++ b/libraries/SQLAPI/include/sqlbase/sqlbase.h @@ -0,0 +1,1774 @@ +/* COPYRIGHT (C) UNIFY CORPORATION 1984-2012 */ +/* +INTERFACE TO + SQLBase 11.7 +*/ +/* +REVISION HISTORY + 12/04/91 GTI release 5.0.0 + 12/08/91 GTI release 5.0.1 + 04/01/92 GTI release 5.0.2 + 08/28/92 GTI release 5.1.0 + 11/02/92 GTI release 5.1.1 + 02/12/93 GTI release 5.1.2 + 04/02/93 GTI release 5.2.0 + 05/03/93 GTI release 5.2.0 + 06/15/93 GTI release (null) + 06/15/93 GTI release 5.2.A + 06/30/93 GTI release 5.1.3 + 08/04/93 GTI release 5.1.4 + 01/19/94 GTI release 5.2.C + 03/22/94 GTI release 5.2.0 + 04/18/93 GTI release 6.0.A + 01/14/94 GTI release 6.0.B + 05/11/94 GTI release 6.0.C + 09/27/94 GTI release 6.0.0 + 04/12/95 GTI release 6.0.1 + 08/02/95 GTI release 6.1.0 + 11/14/96 GTI release 6.5.0 + 10/20/97 GTI release 7.0.0 + 10/23/98 GTI release 7.5.0 + 11/10/00 GTI release 7.6.0 + 08/22/01 RWS release 8.0.0 + 10/22/02 GTI release 8.1.0 + 12/20/02 GTI release 8.5.0 + 01/18/05 RWS release 9.0.1 +DESCRIPTION + This file contains structure definitions and defined constants used to + interface with SQLBASE. For a more complete definition see + "SQLBASE API: SQL Application Programming Interface Reference" +*/ + +#pragma once + +#ifndef SQLBASE_H_ +#define SQLBASE_H_ + +// +// SQLBASE_API_COMPAT: +// Enable backwards compatibility with the SQLBase datatypes and API +// This is a single place to set for both datatypes and functions. +// For finer control see SQLBASE_DEFINE_WIDE_COLUMNS and SQLBASE_REDEFINE_TO_WIDE_FUNCTIONS below. +// Turning this flag off (0) allows wider columns to be used, but may require application code changes. +#if !defined(SQLBASE_API_COMPAT) +#define SQLBASE_API_COMPAT 1 // Support less than 255 columns and less than 255 byte char columns +#endif + +// +// SQLBASE_DEFINE_WIDE_COLUMNS: +// SQLBase now supports 1000 columns per table and the columns can be +// larger than the 254 bytes per column that it used to support. +// Setting of 0: +// Set SQLBASE_DEFINE_WIDE_COLUMNS to 0 if you want to rebuild your +// application for maximum compatibility with the preexisting API. +// You'll limit your access to the older limits, but you should not +// have to debug anything in your application. +// Setting of 1: +// Set SQLBASE_DEFINE_WIDE_COLUMNS to 0 if you want to rebuild your +// application to take advantage of having more columns and wider +// columns. You may have to work through compilation issues and debug +// your application to make sure correct data types are used to +// communicate with the SQLBase API. +// +#if !defined(SQLBASE_DEFINE_WIDE_COLUMNS) +# if SQLBASE_API_COMPAT +# define SQLBASE_DEFINE_WIDE_COLUMNS 0 +# else +# define SQLBASE_DEFINE_WIDE_COLUMNS 1 // Support 1000 columns and 1000 char wide columns +# endif +#endif + +// +// SQLBASE_REDEFINE_TO_WIDE_FUNCTIONS: +// SQLBase has added new API functions, mostly be adding "2" at the +// end of the name. The original API functions are still compatible +// with previous versions of application that have not been +// recompiled with the current libraries. The new API's have +// slightly different parameter types. +// Setting of 0: +// Don't automatically redefine names to the new names. This allows +// the developer to recompile the application and manually change +// names as needed. The old names still work, but they are limited to +// the columns and column widths. This is the recommended setting. +// Setting of 1: +// Using the preprocessor, redefine API function names to the new +// names. This allows the application developer to use the new names +// without changing as many lines in the application. +// +#if !defined(SQLBASE_REDEFINE_TO_WIDE_FUNCTIONS) +# if SQLBASE_API_COMPAT +# define SQLBASE_REDEFINE_TO_WIDE_FUNCTIONS 0 +# else +# define SQLBASE_REDEFINE_TO_WIDE_FUNCTIONS 1 // Use C preprocessor to redefine function names to new API names +# endif +#endif + +#pragma pack(push, 8) +#include +#pragma pack(pop) + +#ifdef __cplusplus +extern "C" +{ /* Assume C declarations for C++ */ +#endif /* __cplusplus */ + +#pragma pack(push,1) + +#ifndef SBSTDCALL +#ifdef __GNUC__ +#define SBSTDCALL /* stdcall */ +#else +#define SBSTDCALL __stdcall +#endif +#endif + +/* VERSION NUMBER */ +#define SQLVERS 120000 /* version number */ +/* DEFINED CONSTANTS */ + +/*------------------------------------------------------------------------- + For 32-bit target systems, such as NetWare 386, Windows/NT, and OS/2 2.x, + redefine some 16-bit-oriented constructs, such as far, near, pascal, etc. + These redefinitions assume the compiler being used supports the flat + memory model. + ------------------------------------------------------------------------- */ + +# undef cdecl + +# define cdecl +# ifndef CDECL +# define CDECL __cdecl +# endif +# define PTR * + +/* FETCH RETURN CODES */ +#define FETRTRU 1 /* data truncated */ +#define FETRSIN 2 /* signed number fetched */ +#define FETRDNN 3 /* data is not numeric */ +#define FETRNOF 4 /* numeric overflow */ +#define FETRDTN 5 /* data type not supported */ +#define FETRDND 6 /* data is not in date format */ +#define FETRNUL 7 /* data is null */ +/* DATABASE DATA TYPES */ +#define SQLDCHR 1 /* character data type */ +#define SQLDNUM 2 /* numeric data type */ +#define SQLDDAT 3 /* date-time data type */ +#define SQLDLON 4 /* long character data type */ +#define SQLDDTE 5 /* date (only) data type */ +#define SQLDTIM 6 /* time (only) data type */ +#define SQLDHDL 7 /* sql handle data type */ +#define SQLDBOO 8 /* boolean data type */ +#define SQLDNCH 9 /* national character data type */ +#define SQLDLNC 10 // long national character (unused) +#define SQLDLBI 11 // long binary data type +#define SQLDDTM 11 /* maximum data type */ +/* PROGRAM DATA TYPES */ +#define SQLPBUF 1 /* buffer */ +#define SQLPSTR 2 /* string (zero terminated) */ +#define SQLPUCH 3 /* unsigned char */ +#define SQLPSCH 4 /* char */ +#define SQLPUIN 5 /* unsigned int */ +#define SQLPSIN 6 /* int */ +#define SQLPULO 7 /* unsigned long */ +#define SQLPSLO 8 /* long */ +#define SQLPFLT 9 /* float */ +#define SQLPDOU 10 /* double */ +#define SQLPNUM 11 /* SQLBASE internal numeric format */ +#define SQLPDAT 12 /* SQLBASE internal datetime format */ +#define SQLPUPD 13 /* unsigned packed decimal */ +#define SQLPSPD 14 /* signed packed decimal */ +#define SQLPDTE 15 /* date only format */ +#define SQLPTIM 16 /* time only format */ +#define SQLPUSH 17 /* unsigned short */ +#define SQLPSSH 18 /* short */ +#define SQLPNST 19 /* numeric string */ +#define SQLPNBU 20 /* numeric buffer */ +#define SQLPEBC 21 /* EBCDIC buffer format */ +#define SQLPLON 22 /* long text string */ +#define SQLPLBI 23 /* long binary buffer */ +#define SQLPLVR 24 /* char\long varchar > 254 */ +#define SQLPULL 25 /* unsigned long long */ +#define SQLPSLL 26 /* long long */ +#define SQLPNCH 27 /* national Character */ +#define SQLPLNC 28 /* long national character */ +#define SQLPBIN 29 /* binary */ +#define SQLPBUFW 30 /* wide char buffer */ +#define SQLPSTRW 31 /* wide char string (zero terminated) */ +#define SQLPUTF8 32 /* UTF8 char buffer */ +#define SQLPUTF16 33 /* UTF16 char buffer */ +#define SQLPDTM 33 /* data type maximum */ +#define SQLPRAW (SQLPDTM + 1) // internal use + +/* EXTERNAL DATA TYPES */ +#define SQLEINT 1 /* INTEGER */ +#define SQLESMA 2 /* SMALLINT */ +#define SQLEFLO 3 /* FLOAT */ +#define SQLECHR 4 /* CHAR */ +#define SQLEVAR 5 /* VARCHAR */ +#define SQLELON 6 /* LONG VARCHAR */ +#define SQLEDEC 7 /* DECIMAL */ +#define SQLEDAT 8 /* DATE */ +#define SQLETIM 9 /* TIME */ +#define SQLETMS 10 /* TIMESTAMP */ +#define SQLEMON 11 /* MONEY */ +#define SQLEDOU 12 /* DOUBLE */ +#define SQLEGPH 13 /* GRAPHIC */ +#define SQLEVGP 14 /* VAR GRAPHIC */ +#define SQLELGP 15 /* LONG VAR GRAPHIC */ +#define SQLEBIN 16 /* BINARY */ +#define SQLEVBI 17 /* VAR BINARY */ +#define SQLELBI 18 /* LONG VARBINARY */ +#define SQLEBOO 19 /* BOOLEAN */ +#define SQLELCH 20 /* CHAR > 254 */ +#define SQLELVR 21 /* VARCHAR > 254 */ +#define SQLENCH 22 /* NATIONAL CHARACTER */ +#define SQLENVC 23 /* NATIONAL VARCHAR */ +#define SQLELNC 24 /* LONG NATIONAL CHARACTER */ +#define SQLEDTM 24 /* Maximum data type allowed */ + +/* SET and GET PARAMETER TYPES */ +/* Global parameters + ------------------ */ +#define SQLPDDB 1 /* default database name */ +#define SQLPDUS 2 /* default user name */ +#define SQLPDPW 3 /* default password */ +#define SQLPGBC 4 /* global cursor value */ +#define SQLPLRD 5 /* local result set directory */ +#define SQLPDBM 6 /* db mode - see below */ +#define SQLPDBD 7 /* dbdir */ +#define SQLPCPG 8 /* code page information */ +#define SQLPNIE 9 /* null indicator error */ +#define SQLPCPT 10 /* connect pass thru to backend */ +#define SQLPTPD 11 /* temp dir */ +#define SQLPDTR 12 /* distributed transaction mode */ +#define SQLPPSW 15 /* server password */ +#define SQLPOOJ 16 /* oracle outer join */ +#define SQLPNPF 17 /* net prefix */ +#define SQLPNLG 18 /* net log */ +#define SQLPNCT 19 /* net check type */ +#define SQLPNCK 20 /* net check */ +#define SQLPLCK 22 /* locks */ +#define SQLPINT 25 /* interrupt */ +#define SQLPERF 27 /* error file */ +#define SQLPDIO 28 /* direct I/O */ +#define SQLPSWR 29 /* default write */ +#define SQLPCTY 31 /* country */ +#define SQLPCSD 32 /* commit server daemon */ +#define SQLPCSR 33 /* commit server */ +#define SQLPCCK 36 /* client check */ +#define SQLPCTS 37 /* characterset */ +#define SQLPCGR 38 /* cache group */ +#define SQLPAIO 39 /* asyncio */ +#define SQLPANL 40 /* apply net log */ +#define SQLPGRS 41 /* get reentracy state */ +#define SQLPSTF 42 /* set SQLTrace flags */ +#define SQLPCLG 43 /* set commit-order logging */ + +/* Server specific parameters + -------------------------- */ + +#define SQLPHEP 1001 /* HEAP size for TSR executables */ +#define SQLPCAC 1002 /* CACHE size in Kbytes */ +#define SQLPBRN 1003 /* brand of database */ +#define SQLPVER 1004 /* release version (ex. "4.0.J") */ +#define SQLPPRF 1005 /* server profiling */ +#define SQLPPDB 1006 /* partitioned database */ +#define SQLPGCM 1007 /* group commit count */ +#define SQLPGCD 1008 /* group commit delay ticks */ +#define SQLPDLK 1009 /* number of deadlocks */ +#define SQLPCTL 1010 /* command time limit */ +#define SQLPAPT 1011 /* process timer activated */ +#define SQLPOSR 1012 /* OS sample rate */ +#define SQLPAWS 1013 /* OS Averaging window size */ +#define SQLPWKL 1014 /* Work Limit */ +#define SQLPWKA 1015 /* Work Space allocation */ +#define SQLPUSR 1016 /* Number of users */ +#define SQLPTMO 1017 /* time out */ +#define SQLPTSS 1018 /* thread stack size */ +#define SQLPTHM 1019 /* thread mode */ +#define SQLPSTC 1020 /* sortcache size in kilobytes */ +#define SQLPSIL 1021 /* silent mode */ +#define SQLPSPF 1022 /* server prefix */ +#define SQLPSVN 1024 /* server name */ +#define SQLPROM 1025 /* read-only mode (0 or 1) */ +#define SQLPSTA 1026 /* enable stats gathering */ +#define SQLPCSV 1027 /* commit server */ +#define SQLPTTP 1028 /* trace for 2PC */ +#define SQLPAJS 1029 /* ANSI join syntax */ +#define SQLPSDIR 1030 /* server module directory */ +#define SQLPSINI 1031 /* server ini file full path name */ +#define SQLPBLD 1032 /* server build number */ + +#define SQLPAUL 1033 /* get an audit list */ + +/* Database specific parameters + ---------------------------- */ + +#define SQLPDBN 2001 /* database name */ +#define SQLPDDR 2002 /* database directory */ +#define SQLPLDR 2003 /* log directory */ +#define SQLPLFS 2004 /* log file size in Kbytes */ +#define SQLPCTI 2005 /* checkpoint time interval in mins */ +#define SQLPLBM 2006 /* log backup mode? (0 or 1) */ +#define SQLPPLF 2007 /* Pre-allocate log files? (0 or 1) */ +#define SQLPTSL 2008 /* transaction span limit */ +#define SQLPROT 2009 /* read-only transactions (0, 1, 2) */ +#define SQLPHFS 2010 /* history file size in Kbytes */ +#define SQLPREC 2011 /* recovery */ +#define SQLPEXE 2012 /* name of executable */ +#define SQLPNLB 2013 /* next log to backup */ +#define SQLPROD 2014 /* read-only database (0 or 1) */ +#define SQLPEXS 2015 /* database file extension size */ +#define SQLPPAR 2016 /* partitioned database (0 or 1) */ +#define SQLPNDB 2017 /* NEWDB */ +#define SQLPLGF 2018 /* log file offset */ +#define SQLPDTL 2019 /* command timelimit */ +#define SQLPSMN 2020 /* show main db */ +#define SQLPCVC 2021 /* catalog version counter */ +#define SQLPDBS 2022 /* database block size */ +#define SQLPUED 2023 /* update external dictionary */ +#define SQLPCINI 2024 /* client ini file full path name */ +#define SQLPDFS 2025 /* get disk free space for database or log */ + +/* Cursor specific parameters + -------------------------- */ + +#define SQLPISO 3001 /* isolation level (SQLILRR etc..) */ +#define SQLPWTO 3002 /* lock wait timeout in seconds */ +#define SQLPPCX 3003 /* preserve context (0 or 1) */ +#define SQLPFRS 3004 /* front end result sets */ +#define SQLPLDV 3005 /* load version (ex. "3.6.22") */ +#define SQLPAUT 3006 /* autocommit */ +#define SQLPRTO 3007 /* rollback trans on lock timeout */ +#define SQLPSCR 3008 /* scroll mode (0 or 1) */ +#define SQLPRES 3009 /* restriction mode (0 or 1) */ +#define SQLPFT 3010 /* fetch through */ +#define SQLPNPB 3011 /* no pre-build in RL mode */ +#define SQLPPWD 3012 /* current password */ +#define SQLPDB2 3013 /* DB2 compatibility mode */ +#define SQLPREF 3014 /* referential integrity checking */ +#define SQLPBLK 3015 /* bulk-execute mode */ +#define SQLPOBL 3016 /* optimized bulk-execute mode */ +#define SQLPLFF 3017 /* LONG data allowed in FERS */ +#define SQLPDIS 3018 /* When to return Describe info */ +#define SQLPCMP 3019 /* Compress messages sent to server */ +#define SQLPCHS 3020 /* chained cmd has SELECT (0 or 1) */ +#define SQLPOPL 3021 /* optimizer level */ +#define SQLPRID 3022 /* ROWID */ +#define SQLPEMT 3023 /* Error Message Tokens */ +#define SQLPCLN 3024 /* client name */ +#define SQLPLSS 3025 /* last compiled SQL statement */ +#define SQLPEXP 3026 /* explain query plan */ +#define SQLPCXP 3027 /* cost of execution plan */ +#define SQLPOCL 3028 /* optimizercostlevel */ +#define SQLPTST 3029 /* distributed transaction status */ +#define SQLP2PP 3030 /* 2-phase protocol (SQL2STD, etc.) */ +/* defined for Load/Unload parsed parameters - cursor specific */ +#define SQLPCLI 3031 /* ON CLIENT option */ +#define SQLPFNM 3032 /* load/unload file name */ +#define SQLPOVR 3033 /* file OVERWRITE flag */ +#define SQLPTFN 3034 /* A Temporary file name */ +#define SQLPTRC 3035 /* Trace stored procedures */ +#define SQLPTRF 3036 /* Tracefile for stored procedures */ +#define SQLPCTF 3037 /* control file flag */ + +#define SQLPMID 3038 /* mail id */ +#define SQLPAID 3039 /* adapter id */ +#define SQLPNID 3040 /* network id */ +#define SQLPUID 3041 /* user application id */ +#define SQLPCIS 3042 /* client identification strings */ +#define SQLPIMB 3043 /* input message buffer size */ +#define SQLPOMB 3044 /* output message buffer size */ +#define SQLPWFC 3045 /* which fetchable command */ +#define SQLPRFE 3046 /* Return on First Error-bulk insert */ +#define SQLPCUN 3047 /* Current cursor user name */ +#define SQLPOFF 3048 /* Optimize First Fetch */ +#define SQLPUSC 3049 /* Use Specified Cursor for ref */ +#define SQLPPDG 3050 /* Plan Debug */ +// Start SQLBase International reserved numbers +#define SQLPCCHS 3051 /* Connection Character set */ +#define SQLPSCHS 3052 /* Server character set */ +#define SQLPCCOL 3053 /* Connection collation */ +#define SQLPSCOL 3054 /* Server collation */ +#define SQLPDCOL 3055 /* Database collation */ +// End SQLBase International reserved numbers +#define SQLPALT 3056 // AutoLockTable +#define SQLPAIV 3057 // AutoIncrement Value +#define SQLPRCM 3058 /* RC isolation level mode (SQLIMRC[X123]) */ +#define SQLPTHR 3059 // Database thread priority + +/* Application Specific ie. applicable to all cursors that + belong to the same application (3700 - 3799) */ + +#define SQLPCCB 3700 /* Connect Closure Behaviour */ +#define SQLPTTV 3701 /* Thread Timeout Value */ + +/* Static attributes + -------------------------- */ + +#define SQLPFAT 4000 /* first attribute */ +#define SQLPBRS 4001 /* back end result sets */ +#define SQLPMUL 4002 /* multi-user */ +#define SQLPDMO 4003 /* demonstration version */ +#define SQLPLOC 4004 /* local version of database */ +#define SQLPFPT 4005 /* 1st participant */ +#define SQLPLAT 4006 /* last attribute */ +#define SQLPCAP 4007 /* API capability level */ +#define SQLPSCL 4008 /* server capability level */ +#define SQLPRUN 4009 /* runtime version */ + +/* Server specific parameters + ---------------------------- */ + +#define SQLPPLV 5001 /* print level */ +#define SQLPALG 5002 /* activity log */ +#define SQLPTMS 5003 /* time stamp */ +#define SQLPPTH 5004 /* path name seperator */ +#define SQLPTMZ 5005 /* time zone */ +#define SQLPTCO 5006 /* time colon only */ + +/* SQL Server & Router/Gateway specific parameters + ------------------------------ */ +#define SQLPESTR 5101 /* get server error # and string */ +#define SQLPMSTR 5102 /* get server msg# and string */ +#define SQLPMAPC 5103 /* MapGTICursors */ +#define SQLPUPRE 5104 /* get user prefix */ +#define SQLPORID 5105 /* Oracle RowID */ +#define SQLPERRM 5106 /* error mapping */ +#define SQLPRTS 5107 /* SQL Server - Return Status */ +#define SQLPSAUT 5108 /* SQL Server - Autocommit */ +#define SQLPROW 5109 /* SQL Server - Command Type */ +#define SQLPEHC 5110 /* SQL Server - Enhanced Cursors */ +#define SQLPGFS 5111 /* SQL Server - Get Fetch Status */ +#define SQLPLBUF 5112 /* Longbuffer setting */ +#define SQLPDPH 5113 /* SQL Server - DBProcess handle */ +#define SQLPCKE 5114 /* SQL Server - CHECK EXISTS */ +#define SQLPWTX 5115 /* SQL Server - DBWRITETEXT */ +#define SQLPYLD 5116 /* SQL Server - YieldOnServerCall */ +#define SQLPOBN 5117 /* ODBC Router - backend brand */ +#define SQLPOBV 5118 /* ODBC Router - backend version */ +#define SQLPODN 5119 /* ODBC Router - driver name */ +#define SQLPODV 5120 /* ODBC Router - driver version */ +#define SQLPOCV 5121 /* ODBC Router - ODBC version */ +#define SQLPRSYS 5122 /* DRDA - EXEC SQL CONNECT TO remote system name */ +#define SQLPLAB 5123 /* DB2 - return label information if exists */ +#define SQLPCID 5124 /* DB2 - Set Current SQLID default */ +#define SQLPNUMST 5125 /* AS/400 Number of Statements */ +#define SQLPBNDRW 5126 /* Oracle- bind SQLPBUF as RAW */ +#define SQLPNLS 5127 /* Informix - NLS database */ + +#define SQLPFRW 5200 /* fetchrow */ +#define SQLPBRW 5201 /* buffrow */ + +/* Sybase System 10 parameters (reserved 5220 - 5250) + ------------------------------------------------------------ */ + +#define SQLPNESTR 5220 /* SYB - get next error from client */ +#define SQLPNMSTR 5221 /* SYB - get next error from server */ +#define SQLPCESTR 5222 /* SYB - get client message count */ +#define SQLPCMSTR 5223 /* SYB - get server message count */ +#define SQLPTXT 5224 /* SYB - allow bind for text, image */ +#define SQLPEMC 5225 /* SYB - enable multiple connections */ + +/* ODBC specific parameters - Refer to ODBC spec for definition + ------------------------------------------------------------ */ + +#define SQLP_ACTIVE_CONNECTIONS 5500 +#define SQLP_ACTIVE_STATEMENTS 5501 +#define SQLP_DATA_SOURCE_NAME 5502 +#define SQLP_DRIVER_HDBC 5503 +#define SQLP_DRIVER_HENV 5504 +#define SQLP_DRIVER_HSTMT 5505 +#define SQLP_DRIVER_NAME 5506 +#define SQLP_DRIVER_VER 5507 +#define SQLP_FETCH_DIRECTION 5508 +#define SQLP_ODBC_API_CONFORMANCE 5509 +#define SQLP_ODBC_VER 5510 +#define SQLP_ROW_UPDATES 5511 +#define SQLP_ODBC_SAG_CLI_CONFORMANCE 5512 +#define SQLP_SERVER_NAME 5513 +#define SQLP_SEARCH_PATTERN_ESCAPE 5514 +#define SQLP_ODBC_SQL_CONFORMANCE 5515 +#define SQLP_DATABASE_NAME 5516 +#define SQLP_DBMS_NAME 5517 +#define SQLP_DBMS_VER 5518 +#define SQLP_ACCESSIBLE_TABLES 5519 +#define SQLP_ACCESSIBLE_PROCEDURES 5520 +#define SQLP_PROCEDURES 5521 +#define SQLP_CONCAT_NULL_BEHAVIOUR 5522 +#define SQLP_CURSOR_COMMIT_BEHAVIOUR 5523 +#define SQLP_CURSOR_ROLLBACK_BEHAVIOUR 5524 +#define SQLP_DATA_SOURCE_READ_ONLY 5525 +#define SQLP_DEFAULT_TXN_ISOLATION 5526 +#define SQLP_EXPRESSIONS_IN_ORDERBY 5527 +#define SQLP_IDENTIFIER_CASE 5528 +#define SQLP_IDENTIFIER_QUOTE_CHAR 5529 +#define SQLP_MAX_COLUMN_NAME_LEN 5530 +#define SQLP_MAX_CURSOR_NAME_LEN 5531 +#define SQLP_MAX_OWNER_NAME_LEN 5532 +#define SQLP_MAX_PROCEDURE_NAME_LEN 5533 +#define SQLP_MAX_QUALIFIER_NAME_LEN 5534 +#define SQLP_MAX_TABLE_NAME_LEN 5535 +#define SQLP_MULT_RESULT_SETS 5536 +#define SQLP_MULTIPLE_ACTIVE_TXN 5537 +#define SQLP_OUTER_JOINS 5538 +#define SQLP_OWNER_TERM 5539 +#define SQLP_PROCEDURE_TERM 5540 +#define SQLP_QUALIFIER_NAME_SEPARATOR 5541 +#define SQLP_QUALIFIER_TERM 5542 +#define SQLP_SCROLL_CONCURRENCY 5543 +#define SQLP_SCROLL_OPTIONS 5544 +#define SQLP_TABLE_TERM 5545 +#define SQLP_TXN_CAPABLE 5546 +#define SQLP_USER_NAME 5547 +#define SQLP_CONVERT_FUNCTIONS 5548 +#define SQLP_NUMERIC_FUNCTIONS 5549 +#define SQLP_STRING_FUNCTIONS 5550 +#define SQLP_SYSTEM_FUNCTIONS 5551 +#define SQLP_TIMEDATE_FUNCTIONS 5552 +#define SQLP_CONVERT_BIGINT 5553 +#define SQLP_CONVERT_BINARY 5554 +#define SQLP_CONVERT_BIT 5555 +#define SQLP_CONVERT_CHAR 5556 +#define SQLP_CONVERT_DATE 5557 +#define SQLP_CONVERT_DECIMAL 5558 +#define SQLP_CONVERT_DOUBLE 5559 +#define SQLP_CONVERT_FLOAT 5560 +#define SQLP_CONVERT_INTEGER 5561 +#define SQLP_CONVERT_LONGVARCHAR 5562 +#define SQLP_CONVERT_NUMERIC 5563 +#define SQLP_CONVERT_REAL 5564 +#define SQLP_CONVERT_SMALLINT 5565 +#define SQLP_CONVERT_TIME 5566 +#define SQLP_CONVERT_TIMESTAMP 5567 +#define SQLP_CONVERT_TINYINT 5568 +#define SQLP_CONVERT_VARBINARY 5569 +#define SQLP_CONVERT_VARCHAR 5570 +#define SQLP_CONVERT_LONGVARBINARY 5571 +#define SQLP_TXN_ISOLATION_OPTION 5572 +#define SQLP_ODBC_SQL_OPT_IEF 5573 + +/*** ODBC SDK 1.0 Additions ***/ +#define SQLP_CORRELATION_NAME 5574 +#define SQLP_NON_NULLABLE_COLUMNS 5575 + +/*** ODBC SDK 2.0 Additions ***/ +#define SQLP_DRIVER_HLIB 5576 +#define SQLP_DRIVER_ODBC_VER 5577 +#define SQLP_LOCK_TYPES 5578 +#define SQLP_POS_OPERATIONS 5579 +#define SQLP_POSITIONED_STATEMENTS 5580 +#define SQLP_GETDATA_EXTENSIONS 5581 +#define SQLP_BOOKMARK_PERSISTENCE 5582 +#define SQLP_STATIC_SENSITIVITY 5583 +#define SQLP_FILE_USAGE 5584 +#define SQLP_NULL_COLLATION 5585 +#define SQLP_ALTER_TABLE 5586 +#define SQLP_COLUMN_ALIAS 5587 +#define SQLP_GROUP_BY 5588 +#define SQLP_KEYWORDS 5589 +#define SQLP_ORDER_BY_COLUMNS_IN_SELECT 5590 +#define SQLP_OWNER_USAGE 5591 +#define SQLP_QUALIFIER_USAGE 5592 +#define SQLP_QUOTED_IDENTIFIER_CASE 5593 +#define SQLP_SPECIAL_CHARACTERS 5594 +#define SQLP_SUBQUERIES 5595 +#define SQLP_UNION 5596 +#define SQLP_MAX_COLUMNS_IN_GROUP_BY 5597 +#define SQLP_MAX_COLUMNS_IN_INDEX 5598 +#define SQLP_MAX_COLUMNS_IN_ORDER_BY 5599 +#define SQLP_MAX_COLUMNS_IN_SELECT 5600 +#define SQLP_MAX_COLUMNS_IN_TABLE 5601 +#define SQLP_MAX_INDEX_SIZE 5602 +#define SQLP_MAX_ROW_SIZE_INCLUDES_LONG 5603 +#define SQLP_MAX_ROW_SIZE 5604 +#define SQLP_MAX_STATEMENT_LEN 5605 +#define SQLP_MAX_TABLES_IN_SELECT 5606 +#define SQLP_MAX_USER_NAME_LEN 5607 +#define SQLP_MAX_CHAR_LITERAL_LEN 5608 +#define SQLP_TIMEDATE_ADD_INTERVALS 5609 +#define SQLP_TIMEDATE_DIFF_INTERVALS 5610 +#define SQLP_NEED_LONG_DATA_LEN 5611 +#define SQLP_MAX_BINARY_LITERAL_LEN 5612 +#define SQLP_LIKE_ESCAPE_CLAUSE 5613 +#define SQLP_QUALIFIER_LOCATION 5614 + +#define SQLP_GET_TYPE_INFO 5699 + + +/* The following parmeters in the range 6000 - 7000 are reserved for + SQLBase INTERNAL use. +*/ + +#define SQLP000 6000 /* for internal use only */ +#define SQLP999 6999 /* for internal use only */ +#define SQLPITP 0x4000 /* INTERNAL USE ONLY */ +#define SQLPITC 0x8000 /* INTERNAL USE ONLY */ + +/* end of SET and GET PARAMETER TYPES */ + + +/* defines for ON, OFF, DEFAULT parameter values */ + +#define SQLVOFF 0 /* parameter should be OFF */ +#define SQLVON 1 /* parameter should be ON */ +#define SQLVDFL 2 /* parameter should default */ + +/* defines for SQLPDBM (db mode) */ + +#define SQLMDBL 1 /* DB Local */ +#define SQLMRTR 2 /* DB Router */ +#define SQLMCOM 3 /* DB Combo */ + +/* defines for database brands */ + +#define SQLBSQB 1 /* SQLBASE */ +#define SQLBDB2 2 /* DB2 */ +#define SQLBDBM 3 /* IBM OS/2 Database Manager */ +#define SQLBORA 4 /* Oracle */ +#define SQLBIGW 5 /* Informix */ +#define SQLBNTW 6 /* Netware SQL */ +#define SQLBAS4 7 /* IBM AS/400 SQL/400 */ +#define SQLBSYB 8 /* Sybase SQL Server */ +#define SQLBDBC 9 /* Teradata DBC Machines */ +#define SQLBALB 10 /* HP Allbase */ +#define SQLBRDB 11 /* DEC's RDB */ +#define SQLBTDM 12 /* Tandem's Nonstop SQL */ +#define SQLBSDS 13 /* IBM SQL/DS */ +#define SQLBSES 14 /* SNI SESAM */ +#define SQLBING 15 /* Ingres */ +#define SQLBSQL 16 /* SQL Access */ +#define SQLBDBA 17 /* DBase */ +#define SQLBDB4 18 /* SNI DDB4 */ +#define SQLBFUJ 19 /* Fujitsu RDBII */ +#define SQLBSUP 20 /* Cincom SUPRA */ +#define SQLB204 21 /* CCA Model 204 */ +#define SQLBDAL 22 /* Apple DAL interface */ +#define SQLBSHR 23 /* Teradata ShareBase */ +#define SQLBIOL 24 /* Informix On-Line */ +#define SQLBEDA 25 /* EDA/SQL */ +#define SQLBUDS 26 /* SNI UDS */ +#define SQLBMIM 27 /* Nocom Mimer */ +#define SQLBOR7 28 /* Oracle version 7 */ +#define SQLBIOS 29 /* Ingres OpenSQL */ +#define SQLBIOD 30 /* Ingres OpenSQL with date support */ +#define SQLBODB 31 /* ODBC Router */ +#define SQLBS10 32 /* SYBASE System 10 */ +#define SQLBSE6 33 /* Informix SE version 6 */ +#define SQLBOL6 34 /* Informix On-Line version 6 */ +#define SQLBNSE 35 /* Informix SE NLS version 6 */ +#define SQLBNOL 36 /* Informix On-Line NLS version 6 */ +#define SQLBSE7 37 /* Informix SE version 7 */ +#define SQLBOL7 38 /* Informix On-Line version 7 */ +#define SQLBETA 39 /* Entire Access, ADABAS */ +#define SQLBI12 40 /* Ingres CA-OpenIngres 1.2 */ +#define SQLBAPP 99 /* SQLHost App Services */ + +/* SIZES */ +#define SQLSNUM 12 /* numeric program buffer size */ +#define SQLSDAT 12 /* date-time program buffer size */ +#define SQLSCDA 26 /* character date-time size */ +#define SQLSDTE SQLSDAT /* date (only) program buffer size */ +#define SQLSCDE 10 /* character date (only) size */ +#define SQLSRID 40 /* size of ROWID */ +#define SQLSTIM SQLSDAT /* time (only) program buffer size */ +#define SQLSCTI 15 /* character time (only) size */ +#define SQLSFEM 100L /* file extension size (multi-user) */ +#define SQLSFES 20L /* file extension size (single-user) */ +#define SQLSTEX 5L /* table extent size */ + + +/* Two-phase Commit Protocols */ + +typedef int SQLT2PP; /* type: 2-phase commit protocol */ + +#define SQL2MIN SQL2STD /* minimum protocol value */ + +#define SQL2STD ((SQLT2PP) 1) /* standard 2pc protocol */ +#define SQL2PRA ((SQLT2PP) 2) /* presumed-abort 2pc protocol */ +#define SQL2PRC ((SQLT2PP) 3) /* presumed-commit 2pc protocol */ +#define SQL2DEF SQL2STD /* default is standard */ + +#define SQL2MAX SQL2PRC /* maximum protocol value */ + +/* Two-phase Commit Votes */ + +typedef int SQLT2PV; /* type: 2-phase commit vote */ + +#define SQLVMIN SQLVCMT /* minimum vote value */ + +#define SQLVCMT ((SQLT2PV) 1) /* Vote Commit */ +#define SQLVRBK ((SQLT2PV) 2) /* Vote Rollback */ +#define SQLVRO ((SQLT2PV) 3) /* Vote ReadOnly */ + +#define SQLVMAX SQLVRO /* maximum vote value */ + +/* defines for distributed transaction status */ + +typedef int SQLTTST; /* distributed transaction state */ + +#define SQLSCMT ((SQLTTST) 1) /* transaction state = COMMITted */ +#define SQLSRBK ((SQLTTST) 2) /* transaction state = ROLLBACKed */ +#define SQLSUNK ((SQLTTST) 3) /* transaction state = UNKNOWN */ + + +/* Define null pointer value */ +#ifndef SQLNPTR +#ifdef __cplusplus +#define SQLNPTR 0 +#else +#define SQLNPTR ((void *)0) +#endif +#endif + +/* RESULT COMMAND TYPES */ +// (internal note: correlate these with exedrv.c & tlkpsm.c) +#define SQLTSEL 1 /* select */ +#define SQLTINS 2 /* insert */ +#define SQLTCTB 3 /* create table */ +#define SQLTUPD 4 /* update */ +#define SQLTDEL 5 /* delete */ +#define SQLTCIN 6 /* create index */ +#define SQLTDIN 7 /* drop index */ +#define SQLTDTB 8 /* drop table */ +#define SQLTCMT 9 /* commit */ +#define SQLTRBK 10 /* rollback */ +#define SQLTACO 11 /* add column */ +#define SQLTDCO 12 /* drop column */ +#define SQLTRTB 13 /* rename table */ +#define SQLTRCO 14 /* rename column */ +#define SQLTMCO 15 /* modify column */ +#define SQLTGRP 16 /* grant privilege on table */ +#define SQLTGRD 17 /* grant dba */ +#define SQLTGRC 18 /* grant connect */ +#define SQLTGRR 19 /* grant resource */ +#define SQLTREP 20 /* revoke privilege on table */ +#define SQLTRED 21 /* revoke dba */ +#define SQLTREC 22 /* revoke connect */ +#define SQLTRER 23 /* revoke resource */ +#define SQLTCOM 24 /* comment on */ +#define SQLTWAI 25 /* wait */ +#define SQLTPOS 26 /* post */ +#define SQLTCSY 27 /* create synonym */ +#define SQLTDSY 28 /* drop synonym */ +#define SQLTCVW 29 /* create view */ +#define SQLTDVW 30 /* drop view */ +#define SQLTRCT 31 /* row count */ +#define SQLTAPW 32 /* alter password */ +#define SQLTLAB 33 /* label on */ +#define SQLTCHN 34 /* chained command */ +#define SQLTRPT 35 /* repair table */ +#define SQLTSVP 36 /* savepoint */ +#define SQLTRBS 37 /* rollback to savepoint */ +#define SQLTUDS 38 /* update statistics */ +#define SQLTCDB 39 /* check database */ +#define SQLTFRN 40 /* foreign DBMS commands */ +#define SQLTAPK 41 /* add primary key */ +#define SQLTAFK 42 /* add foreign key */ +#define SQLTDPK 43 /* drop primary key */ +#define SQLTDFK 44 /* drop foreign key */ +/* SERVER COMMAND TYPES */ +#define SQLTCDA 45 /* create dbarea */ +#define SQLTADA 46 /* alter dbarea */ +#define SQLTDDA 47 /* delete dbarea */ +#define SQLTCSG 48 /* create stogroup */ +#define SQLTASG 49 /* alter stogroup */ +#define SQLTDSG 50 /* delete stogroup */ +#define SQLTCRD 51 /* create database */ +#define SQLTADB 52 /* alter database */ +#define SQLTDDB 53 /* delete database */ +#define SQLTSDS 54 /* set default stogroup */ +#define SQLTIND 55 /* install database */ +#define SQLTDED 56 /* de-install database */ +/* END OF SERVER COMMAND TYPES */ + +#define SQLTARU 57 /* add RI user error */ +#define SQLTDRU 58 /* drop RI user error */ +#define SQLTMRU 59 /* modify RI user error */ +#define SQLTSCL 60 /* set client */ +#define SQLTCKT 61 /* check table */ +#define SQLTCKI 62 /* check index */ +#define SQLTOPL 63 /* PL/SQL Stored Procedure */ +#define SQLTBGT 64 /* BEGIN TRANSACTION */ +#define SQLTPRT 65 /* PREPARE TRANSACTION */ +#define SQLTCXN 66 /* COMMIT TRANSACTION */ +#define SQLTRXN 67 /* ROLLBACK TRANSACTION */ +#define SQLTENT 68 /* END TRANSACTION */ + +/* COMMIT SERVER COMMAND TYPES */ +#define SQLTCBT 69 /* begin transaction */ +#define SQLTCCT 70 /* commit transaction */ +#define SQLTCET 71 /* end transaction */ +#define SQLTCPT 72 /* prepare transaction */ +#define SQLTCRT 73 /* rollback transaction */ +#define SQLTCST 74 /* status transaction */ +#define SQLTCRX 75 /* reduce transaction */ +#define SQLTCSD 76 /* start daemon */ +#define SQLTCTD 77 /* stop daemon */ +#define SQLTCRA 78 /* resolve all transactions */ +#define SQLTCRO 79 /* resolve one transaction */ +#define SQLTCOT 80 /* orphan a transaction */ +#define SQLTCFL 81 /* CREATE FAILURE */ +#define SQLTDFL 82 /* DELETE FAILURE */ +#define SQLTSTN 83 /* SET TRACETWOPC ON */ +#define SQLTSTF 84 /* SET TRACETWOPC OFF */ +#define SQLTUNL 85 /* Unload command */ +#define SQLTLDP 86 /* load command */ +#define SQLTPRO 87 /* stored procedure */ +#define SQLTGEP 88 /* grant execute privilege */ +#define SQLTREE 89 /* revoke execute privilege */ +#define SQLTTGC 90 /* create trigger */ +#define SQLTTGD 91 /* drop trigger */ +#define SQLTVNC 92 /* create event */ +#define SQLTVND 93 /* drop event */ +#define SQLTSTR 94 /* start audit */ +#define SQLTAUD 95 /* audit message */ +#define SQLTSTP 96 /* stop audit */ +#define SQLTACM 97 /* Alter CoMmand */ +#define SQLTXDL 98 /* lock database */ +#define SQLTXDU 99 /* unlock database */ +#define SQLTCEF 100 /* create external function */ +#define SQLTDEF 101 /* drop external function */ +#define SQLTDBT 102 /* DBATTRIBUTE */ +#define SQLTATG 103 /* ALTER TRIGGER */ +#define SQLTAEF 104 /* alter external function */ +#define SQLTADS 105 /* alter database security */ +#define SQLTAEK 106 /* alter exportkey */ +#define SQLTASP 107 /* alter server */ +#define SQLTLTB 108 /* lock table */ + +// Unclassified command types +#define SQLTAIN 109 // Auto_INcrement +#define SQLTCRL 110 // Create RoLe +#define SQLTDRL 111 // Drop RoLe +#define SQLTGRL 112 // Grant RoLe +#define SQLTRRL 113 // Revoke RoLe + +/* DEFAULTS */ +#define SQLDCGP 30 /* CACHEGROUP, cache page allocation group */ +#define SQLDCRT 5 /* CONNECTRETRY, seconds for connect timeout */ +#define SQLDCPT 10 /* CONNECTPAUSETICKS, ticks for pausing */ +#define SQLDDGH 10000l /* HEAP, DBGATEWY heap size */ +#define SQLDDLH 145000l /* HEAP, DBLOCAL heap size */ +#define SQLDDRH 20000l /* HEAP, DBROUTER heap size */ +#define SQLDNBS 30000 /* NETBUFFER, size DBXROUTR network buffer */ +#define SQLDRET 3 /* RETRY, number of connect retries */ +#define SQLDSMS 20000 /* Minimum stack size */ +#define SQLDSVS 50000 /* Default STACKSIZE, DBSERVER stack */ +#define SQLDSXS 100000 /* Maximum stack size */ +#define SQLDMSK 200000 /* how much stackspace to reserve for main sqlbase thread */ +#define SQLDNPR 300 /* # processes stacks preallocated for */ +#define SQLDTMZ 0l /* TIMEZONE */ +#define SQLDSVU 128 /* USERS, DBSERVER users */ +#define SQLDSMU 3 /* USERS, DBSIM users */ +#define SQLDCLI 1024000L /* checkpoint log interval in bytes */ +#define SQLDCTI 1 /* checkpt time interval in minutes */ +#define SQLDWSA 1000 /* cursor work space allocation */ +#define SQLDPRE 5 /* decimal precision */ +#define SQLDSCA 0 /* decimal scale */ +#define SQLDIML 2000 /* input message buffer length */ +#define SQLDPRI 10 /* integer precision */ +#define SQLDSUL 6 /* length of system user name */ +#define SQLDLBS 20480 /* log buffer size in bytes */ +#define SQLDLFS 1024000L /* log file size in bytes */ +#define SQLDHFS 1000 /* maximum history file size */ +#define SQLDLPM 20000 /* maximum number of rollback log pages */ +#define SQLDNES 100 /* normal file extension size */ +#define SQLDOML 1000 /* output message buffer length */ +#define SQLDPES 1024 /* partitioned file extension size */ +#define SQLDPUB "PUBLIC" /* public user name */ +#define SQLDLPT 16000 /* rollback log page threshold */ +#define SQLDPRS 5 /* smallint precision */ +#define SQLDSUN "SYSADM" /* system default username */ +#define SQLDESC "$$" /* connect escape sequence */ +#define SQLDSUN "SYSADM" /* system default username */ +#define SQLDNTG 16 /* number of triggers allowed per event/time/scope */ + /* Maximum triggers for an event is * 4 */ + +/* MAXIMUM SIZES */ +#define SQLMSBNL 18 /* short bind name length */ +#define SQLMBNL 36 /* bind name length */ +#define SQLMONS (SQLMBNL * 4) /* Maximum name size (compatibility with SB10) */ +#define SQLMLBNL 64 /* long bind name length */ +#define SQLMBSL 32000 /* max length Backend string literal */ +#define SQLMCG1 32767 /* cache group pages */ +#define SQLMCKF 16 /* concatenated key fields */ +#define SQLMCLL 255 /* clientlimit */ +#define SQLMCLN 12 /* maximum client name size */ +#define SQLMCLN_L 256 /* maximum client name size (SQLBase 11.7 and above) */ +#define SQLMCLP 128 /* commmand line parameter length */ +#define SQLMCMT 113 /* max command types */ +#define SQLMCNM SQLMBNL /* max referential constraint name */ +#define SQLMCOH 255 /* column heading string */ +#define SQLMCST 400 /* max connect string length */ +#define SQLMDBA 10 /* number of databases accessed */ +#define SQLMDFN 25 /* database file name */ +#define SQLMPSS 25 /* process status string */ +#define SQLMDMO 750 /* maximum DB size for demos (Kbytes) */ +#define SQLMSDNM 8 /* database name CAM_1..4_VERSION */ +#define SQLMDNM 16 /* database name */ +#define SQLMDVL_S 254 /* data value length */ +#define SQLMDVL 900 /* data value length */ +#define SQLMNCHL_S 127 /* Maximum # chars in NCHAR/NVARCHAR column */ +#define SQLMNCHL 450 /* Maximum # chars in NCHAR/NVARCHAR column */ +#define SQLMERR 255 /* error message length */ +#define SQLMETX 3000 /* error text length */ +/* ------------------------------------------------------------------------- * + * We are reverting back to the previous value of 128 for SQLMFNL because it * + * is resulting in unnecessary complications in the cdm, aic size etc. * + * ------------------------------------------------------------------------- */ +#define SQLMFNL 128 /* filename length (legacy size) */ +#define SQLMFNL_L 260 /* filename length (large size) */ + +/* ------------------------------------------------------------------------- * + * Note : We are defining a new constant called SQLRFNL which is used to * + * create a filename of restricted length (128) instead of SQLMFNL. It is * + * required because the areas table created by main.ini uses a pathname of * + * 128 bytes * + * ------------------------------------------------------------------------- */ +#define SQLRFNL 128 +#define SQLMFQN 3 /* number of fields in fully qualified column name */ +#define SQLMFRD 40 /* maximum size of foreign result set directory */ +#define SQLMGCM 32767 /* maximum group commit count */ +#define SQLMICO 255 /* installed cache page owners */ +#define SQLMICU 255 /* installed cursors */ +#define SQLMIDB 255 /* installed databases */ +#define SQLMILK 32767 /* installed locks */ +#define SQLMINL 2000 /* input length */ +#define SQLMIPG 1000000 /* installed pages */ +#define SQLMIPR 800 /* installed processes */ +#define SQLMITR 800 /* installed transactions */ +#define SQLMJTB 17 /* joined tables */ +#define SQLMTAC 17*16 /* tables each tab can have subsel */ +#define SQLMLID 32 /* long identifiers */ +#define SQLMNBF 60000 /* network buffer size */ +#define SQLMNCO 1001 /* number of columns per row */ +#define SQLMUCO 1000 /* number of user columns available */ +#define SQLMNPF 3 /* NETPREFIX size */ +#define SQLMOUL 1000 /* output length */ +#define SQLMPAL 255 /* max path string length */ +#define SQLMSVP 1024 /* max serverpath (inside ini client section) string length */ +#define SQLMPFS 21 /* max platform string length */ +#define SQLMPKL 1200 /* max primary key length */ +#define SQLMPRE 15 /* maximum decimal precision */ +#define SQLMPTL 4 /* maximum print level */ +#define SQLMPWD 128 /* maximum password length */ +#define SQLMCTL 43200 /* max query timelimit (12 hours) */ +#define SQLMRBB 8192 /* maximum rollback log buffer */ +#define SQLMRCB 20480 /* maximum recovery log buffer */ +#define SQLMRET 1000 /* retry count */ +#define SQLMRFH 4 /* maximum # remote file handles */ +#define SQLMROB 8192 /* max size of restore output buffer */ +#define SQLMSES 16 /* number of sessions */ +#define SQLMSID 8 /* short identifiers */ +#define SQLMSLI 255 /* max number of select list exprs. */ +#define SQLMSNM_S 8 /* server name prior to 11.7 */ +#define SQLMSNM 36 /* server name */ +#define SQLMSRL 32 /* max length of SQL reserved word */ +#define SQLMSVN 199 /* maximum server names */ +#define SQLMTFS 10 /* maximum temporary file size */ +#define SQLMTMO 200 /* maximum timeout */ +#define SQLMTSS 256 /* text string space size */ +#define SQLMUSR 128 /* maximum username length */ +#define SQLMVER 8 /* max version string (nn.nn.nn) */ +#define SQLMXER 255 /* Extended error message length */ +#define SQLMXFS 2147483648UL /* max file size in bytes */ +#define SQLMXLF 2097152 /* max log file size in KB */ +#define SQLMTHM 2 /* maximum thread mode value */ +#define SQLMGTI 250 /* max global transaction-id length */ +#define SQLMAUF 32 /* max concurrent audit files */ +#define SQLMPNM 8 /* max protocol name length */ +#define SQLMOSR 255 /* max OS sample rate */ +#define SQLMAWS 255 /* max OS Averaging window size */ +#define SQLMMID 32 /* max length identificatin strings */ +#define SQLMLENDAL (0xFFFF) // Maximum size of SQLTDAL +#define SQLMEUSR 128 // Maximum length in bytes of external user + +/* MINIMUMS */ +#define SQLMCG0 1 /* cache group pages */ +#define SQLMEXS 1024 /* partitioned file extension size */ +#define SQLMLFE 100000L /* minimum log file extension size */ +#define SQLMLFS 100000L /* minimum log file size */ +#define SQLMPAG 15 /* minimum pages (cache) */ +#define SQLMITM 1 /* minimum thread mode value */ + +/* typedefs */ +#if defined(_WIN32) +typedef __int8 byte1; +typedef unsigned __int8 ubyte1; +typedef __int16 byte2; +typedef unsigned __int16 ubyte2; +typedef __int32 byte4; +typedef unsigned __int32 ubyte4; +typedef __int64 byte8; /* 64-bits signed */ +typedef unsigned __int64 ubyte8; /* 64-bits unsigned */ +#else // linux +#pragma pack(push, 8) +#include +#pragma pack(pop) +typedef int8_t byte1; +typedef uint8_t ubyte1; +typedef int16_t byte2; +typedef uint16_t ubyte2; +typedef int32_t byte4; +typedef uint32_t ubyte4; +typedef int64_t byte8; +typedef uint64_t ubyte8; +#endif + +typedef ubyte1 *ubyte1p; +typedef int (SBSTDCALL * SQLTPFP) (void); + +#if SQLBASE_DEFINE_WIDE_COLUMNS +typedef ubyte2 ubyte1x; +#else +typedef ubyte1 ubyte1x; +#endif + +// Typedefs defined to work with both wide character columns and the +// narrower ones. These are conditionally defined to be either 1 or 2 +// byte width. +typedef ubyte1x SQLTBNN; /* bind number */ +typedef ubyte1x SQLTCDL; /* column data length */ +typedef ubyte1x SQLTCHL; /* column header length */ +typedef ubyte1x SQLTDDL; /* database data length */ +typedef ubyte1x SQLTLBL; /* label information length */ +typedef ubyte1x SQLTNBV; /* number of bind variables */ +typedef ubyte1x SQLTNSI; /* number of select items */ +typedef ubyte1x SQLTPDL; /* program data length */ +typedef ubyte1x SQLTSLC; /* select list column */ + +// These are the 1 byte flavor of the above defines to be used where +// explicitly needed. +typedef ubyte1 SQLTBNN_S; /* bind number */ +typedef ubyte1 SQLTCDL_S; /* column data length */ +typedef ubyte1 SQLTCHL_S; /* column header length */ +typedef ubyte1 SQLTDDL_S; /* database data length */ +typedef ubyte1 SQLTLBL_S; /* label information length */ +typedef ubyte1 SQLTNBV_S; /* number of bind variables */ +typedef ubyte1 SQLTNSI_S; /* number of select items */ +typedef ubyte1 SQLTPDL_S; /* program data length */ +typedef ubyte1 SQLTSLC_S; /* select list column */ + +// These are the 2 byte flavor of the above defines to be used where +// explicitly needed. +typedef ubyte2 SQLTBNN_L; /* bind number */ +typedef ubyte2 SQLTCDL_L; /* column data length */ +typedef ubyte2 SQLTCHL_L; /* column header length */ +typedef ubyte2 SQLTDDL_L; /* database data length */ +typedef ubyte2 SQLTLBL_L; /* label information length */ +typedef ubyte2 SQLTNBV_L; /* number of bind variables */ +typedef ubyte2 SQLTNSI_L; /* number of select items */ +typedef ubyte2 SQLTPDL_L; /* program data length */ +typedef ubyte2 SQLTSLC_L; /* select list column */ + +typedef ubyte1 SQLTARC; /* remote connection architecture */ +typedef ubyte1 SQLTBNL; /* bind name length */ +typedef ubyte1p SQLTBNP; /* bind name pointer */ +typedef byte2 SQLTNUL; /* null indicator */ +typedef ubyte1 SQLTBOO; /* boolean data type */ +typedef ubyte1 SQLTCHO; /* check option */ +typedef ubyte1p SQLTCHP; /* column header pointer */ +typedef ubyte2 SQLTCLL; /* column data length(long) */ +typedef ubyte1 SQLTCTY; /* command type */ +typedef ubyte2 SQLTCUR; /* cursor number */ +typedef ubyte2 SQLTCVL; /* column value length (enlarged size) */ +typedef ubyte2 SQLTDAL; /* data length */ +typedef ubyte1p SQLTDAP; /* data pointer */ +typedef byte2 SQLTDAY; /* number of days */ +typedef ubyte1 SQLTDDT; /* database data type */ +typedef ubyte2 SQLTDEDL; /* database extended data length */ +typedef ubyte2 SQLTDPT; /* database parameter type */ +typedef ubyte4 SQLTDPV; /* database parameter value */ +typedef ubyte2 SQLTEPO; /* error position */ +typedef ubyte2 SQLTFAT; /* file attribute */ +typedef ubyte2 SQLTFLD; /* SELECT statement field number */ +typedef byte2 SQLTFLG; /* flag field */ +typedef ubyte4 SQLTFLH; /* file handle */ +typedef byte2 SQLTFMD; /* file mode */ +typedef ubyte2 SQLTFNL; /* file name length */ +typedef ubyte1p SQLTFNP; /* file name pointer */ +typedef ubyte1 SQLTFSC; /* fetch status code */ +typedef ubyte1p SQLTILV; /* isolation level string */ +typedef ubyte1p SQLTLBP; /* label infromation pointer */ +typedef byte8 SQLTLLI; /* long long integer */ +typedef byte4 SQLTLNG; /* long size */ +typedef ubyte4 SQLTLSI; /* long size */ +typedef ubyte2 SQLTMSZ; /* message size */ +typedef ubyte2 SQLTNCL; // number of columns +typedef ubyte2 SQLTNCU; /* number of cursors */ +typedef ubyte1 SQLTNML; /* number length */ +typedef ubyte1p SQLTNMP; /* number pointer */ +typedef ubyte2 SQLTNPG; /* number of pages */ +typedef ubyte4 SQLTLNPG; /* number of pages */ +typedef ubyte1 SQLTPCX; /* preserve context flag */ +typedef ubyte1 SQLTPDT; /* program data type */ +typedef ubyte4 SQLTPGN; /* page number */ +typedef ubyte2 SQLTPNM; /* process number */ +typedef ubyte1 SQLTPRE; /* precision */ +typedef ubyte2 SQLTPTY; /* set/get parameter type */ +typedef ubyte1 SQLTRBF; /* roll back flag */ +typedef byte2 SQLTRCD; /* return codes */ +typedef ubyte1 SQLTRCF; /* recovery flag */ +typedef ubyte2 SQLTRFM; /* rollforward mode */ +typedef byte4 SQLTROW; /* number of rows */ +typedef ubyte1 SQLTSCA; /* scale */ +typedef ubyte2 SQLTSTC; /* statistics counter */ +typedef ubyte2 SQLTSVH; /* server handle */ +typedef ubyte2 SQLTSVN; /* server number */ +typedef byte2 SQLTTIV; /* wait timeout value */ +typedef byte2 SQLTWNC; /* whence */ +typedef ubyte2 SQLTWSI; /* work size */ +typedef ubyte4 SQLTWSI_L; // large work size +typedef ubyte2 SQLTBIR; /* bulk insert error row number */ +typedef ubyte1p SQLTDIS; /* Describe info indicator */ +typedef byte4 SQLTXER; /* extended error # */ +typedef ubyte4 SQLTPID; /* client process id */ +typedef ubyte4 SQLTMOD; /* mode flag */ +typedef ubyte4 SQLTCON; /* connection handle */ +typedef ubyte2 SQLTCID; // collation ID + +/* defines for isolation level string */ +#define SQLILRR "RR" /* Repeatable Read isolation */ +#define SQLILCS "CS" /* Cursor Stability isolation */ +#define SQLILRO "RO" /* Read-Only isolation */ +#define SQLILRL "RL" /* Release Locks isolation */ +#define SQLILRC "RC" // Read Committed isolation +#define SQLILRC1 "R1" // Read Committed isolation mode 1 (default RC mode) +#define SQLILRC2 "R2" // Read Committed isolation mode 2 +#define SQLILRC3 "R3" // Read Committed isolation mode 3 +/* defines for isolation level flags*/ +#define SQLFIRR 0x01 /* Repeatable Read isolation flag */ +#define SQLFICS 0x02 /* Cursor Stability isolation flag */ +#define SQLFIRO 0x04 /* Read-Only isolation flag */ +#define SQLFIRL 0x08 /* Release Locks isolation flag */ +#define SQLFIRC 0x10 // Read Committed isolation flag +/* defines for RC isolation level mode */ +#define SQLIMRCX 0 // Not in RC mode +#define SQLIMRC1 1 // Timestamp moves when no active cursor (default) +#define SQLIMRC2 2 // Timestamp moves on new commands +#define SQLIMRC3 3 // Timestamp moves on new commands and fetches +/* defines for SQLROF rollforward mode parameter */ +#define SQLMEOL 1 /* rollforward to end of log */ +#define SQLMEOB 2 /* rollforward to end of backup */ +#define SQLMTIM 3 /* rollforward to specified time */ +/* defines for when to collect Describe information */ +#define SQLDELY 0 /* get Describe info after sqlcom */ +#define SQLDDLD 1 /* get Describe info after sqlexe */ +#define SQLDNVR 2 /* never get any Describe info */ +/* defines for SQLETX() and SQLTEM(): error text type parameters */ +#define SQLXMSG 1 /* retrieve error message text */ +#define SQLXREA 2 /* retrieve error message reason */ +#define SQLXREM 4 /* retrieve error message remedy */ + +/* defines for extended directory open function */ +#define SQLANRM 0x00 /* normal - no restrictions */ +#define SQLARDO 0x01 /* read only */ +#define SQLAHDN 0x02 /* hidden file */ +#define SQLASYS 0x04 /* system file */ +#define SQLAVOL 0x08 /* volume label */ +#define SQLADIR 0x10 /* directory */ +#define SQLAARC 0x20 /* archive bit */ +#define SQLAFDL 0x100 /* files and directories */ +#define SQLAFIL 0x200 /* files only */ + +/* defines for state of cursor */ +#define SQLCIDL 0 /* idle cursor */ +#define SQLCECM 1 /* executing compile */ +#define SQLCCCM 2 /* completed compile */ +#define SQLCEXE 3 /* executing command */ +#define SQLCCXE 4 /* completed command */ +#define SQLCEFT 5 /* executing fetch */ +#define SQLCCFT 6 /* completed fetch */ +/* SYSTEM DEFINED TYPEDEF'S -- FOR SYSTEM USE ONLY */ + +typedef ubyte2 SQLTMSL; /* message length */ +typedef byte1 *SQLTMSP; /* message pointer */ + +/* +DESCRIPTION + This structure is used to receive system information from the + backend. Structure elements must be arranged so that the structure + layout is the same in packed or padded compilation modes. For + now, this means longs in the front, ints in the middle, and chars at + the end of the structure. +*/ + +struct sysdefx +{ + SQLTPGN syslpt; /* log page threshold */ + SQLTPGN syslpm; /* log page maximum */ + ubyte4 syshep; /* heap size */ + SQLTNPG sysncp; /* number of cache pages */ + SQLTTIV systiv; /* wait timeout value in seconds */ + ubyte1 sysiso[3]; /* isolation level */ + ubyte1 sysjou; /* journal */ + ubyte1 syslog; /* log */ + ubyte1 sysrec; /* recovery */ + ubyte1 systyp; /* system type */ +}; +typedef struct sysdefx sysdef; +typedef struct sysdefx SQLTSYS; +#define SYSSIZ sizeof(sysdef) + + +/* +DESCRIPTION: + This structure is used as a parameter to the SQLGDI function. After a + a compile, all relevant information for a given Select column can be + obtained in this structure. + Note: + Please note that, originally, gdichb was the first element of the + gdidefx structure. It has been moved further down because a column + heading can be greater than 31 bytes. A bug was reported complaining + that the column heading was not being returned correctly since the + maximum length of a column heading is 46. This can now be returned + since the size of the buffer (gdichb) has been changed to 47. + Also, the length field (gdichl) has also been moved down to go with + the column heading buffer (gdichb). + The original gdichb and gdichl fields have been renamed to gdifl1 and + gdifl2. +*/ +struct gdidefx +{ + ubyte1 gdifl1[31]; /* filler reserved for future use */ + ubyte1 gdifl2; /* filler reserved for future use */ + ubyte1 gdilbb[31]; /* label buffer */ + SQLTLBL_S gdilbl; /* label info length */ + SQLTSLC_S gdicol; /* select column number */ + SQLTDDT gdiddt; /* database data type */ + SQLTDEDL gdiddl; /* database extended data length */ + SQLTDDT gdiedt; /* external data type */ + SQLTDEDL gdiedl; /* external extended data length */ + SQLTPRE gdipre; /* decimal precision */ + SQLTSCA gdisca; /* decimal scale */ + byte2 gdinul; /* null indicator */ + ubyte1 gdichb[47]; /* column heading buffer */ + SQLTCHL_S gdichl; /* column heading length */ + byte1 gdifil[2]; /* for future use */ +}; +typedef struct gdidefx gdidef; +typedef struct gdidefx SQLTGDI; +typedef struct gdidefx *SQLTPGD; +#define GDISIZ sizeof(gdidef) + +// Make compatible with SB10 +struct gdidef2x +{ + ubyte1 gdifl1[31]; /* filler reserved for future use */ + ubyte1 gdifl2; /* filler reserved for future use */ + ubyte1 gdilbb[31]; /* label buffer */ + SQLTLBL_S gdilbl; /* label info length */ + SQLTSLC_L gdicol; /* select column number */ + SQLTDDT gdiddt; /* database data type */ + SQLTDEDL gdiddl; /* database extended data length */ + SQLTDDT gdiedt; /* external data type */ + SQLTDEDL gdiedl; /* external extended data length */ + SQLTPRE gdipre; /* decimal precision */ + SQLTSCA gdisca; /* decimal scale */ + byte2 gdinul; /* null indicator */ + ubyte1 gdichb[47]; /* column heading buffer */ + SQLTCHL_S gdichl; /* column heading length */ + byte1 gdifil[1]; /* for future use */ +}; +typedef struct gdidef2x gdidef2; +typedef struct gdidef2x SQLTGDI2; +typedef struct gdidef2x *SQLTPGD2; +#define GDISIZ2 sizeof(gdidef2) + +/* +DESCRIPTION + This structure is used when passing binary data to and from external + functions. Since binary data can contains nulls as part of the data + we cannot look for a string terminator. Hence this structure is used + to provide a pointer to the binary data and the length of the data. +*/ + +struct binaryx +{ + long binary_len; + char *binary_ptr; +}; + +#ifndef _INC_FSTREAM +typedef struct binaryx binary; +#endif +typedef struct binaryx BINARY; +typedef struct binaryx *lpbinary; +typedef struct binaryx *LPBINARY; + +#define BINARYSIZ sizeof(BINARY) + +#define BINARY_GET_LENGTH(x) (x.binary_len) +#define BINARY_GET_BUFFER(x) (x.binary_ptr) + +#define BINARY_SET_LENGTH(x,y) (x.binary_len=y) +#define BINARY_SET_BUFFER(x,y) (x.binary_ptr=y) + +/* + The following datatypes are analogous to the SqlWindows datatypes + NUMBER and DATETIME. They are used to pass the Sqlbase internal number + and datatime datatypes to external functions +*/ + +struct datetimex +{ + char datetime_len; + char datetime_value[12]; +}; + +typedef struct datetimex datetime; + +#define DATETIMESIZ sizeof(datetime) + +#define DATETIME_IS_NULL(x) (x.datetime_len == 0) +#define DATETIME_SET_NULL(x) (x.datetime_len = 0) + +struct numberx +{ + char number_len; + char number_value[12]; +}; + +typedef struct numberx number; + +#define NUMBERSIZ sizeof(number) + +#define NUMBER_IS_NULL(x) (x.number_len == 0) +#define NUMBER_SET_NULL(x) (x.number_len = 0) + + +/* system types */ +#define SYSTSGL 1 /* single user */ +#define SYSTMUL 2 /* multi-user */ +#define SYSTDB2 3 /* DB2 */ +#define SYSTDMO 4 /* demo */ +#define SYSTGWY 5 /* SQLNetwork Gateway */ +#define SYSTRTR 6 /* SQLNetwork Router */ +#define SYSTSHAS 7 /* SQLNetwork SQLHost App Services */ + +/*------------------------------------------------------------------------- + SQL API calling convention: + + For 32-bit systems, the calling convention used depends on the + target platform: + + - For NetWare and Windows/NT, the __stdcall calling convention is used. + If __stdcall is not supported by your compiler, then you will need + to define it to be something equivalent to __stdcall. + ------------------------------------------------------------------------- */ + +# define SQLTAPI byte2 SBSTDCALL /* Use __stdcall */ + +/* SQL FUNCTION PROTOTYPES */ + +SQLTAPI sqlarf(SQLTCUR cur, SQLTFNP fnp, SQLTFNL fnl, SQLTCHO cho); +SQLTAPI sqlbbr(SQLTCUR cur, SQLTXER *errnum, SQLTDAP errbuf, SQLTDAL *buflen, + SQLTBIR *errrow, SQLTRBF *rbf, SQLTBIR errseq); +SQLTAPI sqlbdb(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel, SQLTFNP bkpdir, + SQLTFNL bkpdirl, SQLTBOO local, SQLTBOO over); +SQLTAPI sqlbef(SQLTCUR cur); +SQLTAPI sqlber(SQLTCUR cur, SQLTRCD *rcd, SQLTBIR *errrow, SQLTRBF *rbf, SQLTBIR errseq); +SQLTAPI sqlbkp(SQLTCUR cur, SQLTBOO defalt, SQLTBOO overwrt, SQLTFNP bkfname, + SQLTFNL bkfnlen); +SQLTAPI sqlbld(SQLTCUR cur, SQLTBNP bnp, SQLTBNL bnl); +SQLTAPI sqlbld2(SQLTCUR cur, SQLTBNP bnp, SQLTBNL bnl, SQLTPDT pdt); +SQLTAPI sqlblf(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel, SQLTFNP bkpdir, + SQLTFNL bkpdirl, SQLTBOO local, SQLTBOO over); +SQLTAPI sqlblk(SQLTCUR cur, SQLTFLG blkflg); +SQLTAPI sqlbln(SQLTCUR cur, SQLTBNN_S bnn); +SQLTAPI sqlbln2(SQLTCUR cur, SQLTBNN_L bnn, SQLTPDT pdt); +SQLTAPI sqlbna(SQLTCUR cur, SQLTBNP bnp, SQLTBNL bnl, SQLTDAP dap, SQLTDAL dal, + SQLTSCA sca, SQLTPDT pdt, SQLTNUL nli); +SQLTAPI sqlbnd(SQLTCUR cur, SQLTBNP bnp, SQLTBNL bnl, SQLTDAP dap, SQLTDAL dal, + SQLTSCA sca, SQLTPDT pdt); +SQLTAPI sqlbnn(SQLTCUR cur, SQLTBNN_S bnn, SQLTDAP dap, SQLTDAL dal, SQLTSCA sca, + SQLTPDT pdt); +SQLTAPI sqlbnn2(SQLTCUR cur, SQLTBNN_L bnn, SQLTDAP dap, SQLTDAL dal, SQLTSCA sca, + SQLTPDT pdt); +SQLTAPI sqlbnu(SQLTCUR cur, SQLTBNN_S bnn, SQLTDAP dap, SQLTDAL dal, SQLTSCA sca, + SQLTPDT pdt, SQLTNUL nli); + +SQLTAPI sqlbnu2(SQLTCUR cur, SQLTBNN_L bnn, SQLTDAP dap, SQLTDAL dal, SQLTSCA sca, + SQLTPDT pdt, SQLTNUL nli); +SQLTAPI sqlbss(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel, SQLTFNP bkpdir, + SQLTFNL bkpdirl, SQLTBOO local, SQLTBOO over); +SQLTAPI sqlcan(SQLTCUR cur); +SQLTAPI sqlcbv(SQLTCUR cur); +SQLTAPI sqlcch(SQLTCON *hConp, SQLTDAP dbnamp, SQLTDAL dbnaml, SQLTMOD fType); +SQLTAPI sqlcdr(SQLTSVH shandle, SQLTCUR cur); +SQLTAPI sqlcex(SQLTCUR cur, SQLTDAP dap, SQLTDAL dal); +SQLTAPI sqlcexUtf8(SQLTCUR cur, SQLTDAP dap, SQLTDAL dal); +SQLTAPI sqlcexW(SQLTCUR cur, wchar_t *dap, SQLTDAL dal); +SQLTAPI sqlclf(SQLTSVH cur, SQLTDAP logfile, SQLTFMD startflag); +SQLTAPI sqlcmt(SQLTCUR cur); +SQLTAPI sqlcnc(SQLTCUR *curp, SQLTDAP dbnamp, SQLTDAL dbnaml); +SQLTAPI sqlcnr(SQLTCUR *curp, SQLTDAP dbnamp, SQLTDAL dbnaml); +SQLTAPI sqlcom(SQLTCUR cur, SQLTDAP cmdp, SQLTDAL cmdl); +SQLTAPI sqlcomUtf8(SQLTCUR cur, SQLTDAP cmdp, SQLTDAL cmdl); +SQLTAPI sqlcomW(SQLTCUR cur, wchar_t *cmdp, SQLTDAL cmdl); +SQLTAPI sqlcon(SQLTCUR *curp, SQLTDAP dbnamp, SQLTDAL dbnaml, SQLTWSI cursiz, + SQLTNPG pages, SQLTRCF recovr, SQLTDAL outsize, SQLTDAL insize); +SQLTAPI sqlcpy(SQLTCUR fcur, SQLTDAP selp, SQLTDAL sell, SQLTCUR tcur, SQLTDAP isrtp, + SQLTDAL isrtl); +SQLTAPI sqlcre(SQLTSVH shandle, SQLTDAP dbnamp, SQLTDAL dbnaml); +SQLTAPI sqlcrf(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel); +SQLTAPI sqlcrs(SQLTCUR cur, SQLTDAP rsp, SQLTDAL rsl); +SQLTAPI sqlcsv(SQLTSVH *shandlep, SQLTDAP serverid, SQLTDAP password); +SQLTAPI sqlcty(SQLTCUR cur, SQLTCTY *cty); +SQLTAPI sqldbn(SQLTDAP serverid, SQLTDAP buffer, SQLTDAL length); +SQLTAPI sqldch(SQLTCON hCon); +SQLTAPI sqlded(SQLTSVH shandle, SQLTDAP dbnamp, SQLTDAL dbnaml); +SQLTAPI sqldel(SQLTSVH shandle, SQLTDAP dbnamp, SQLTDAL dbnaml); +SQLTAPI sqldes(SQLTCUR cur, SQLTSLC_S slc, SQLTDDT *ddt, SQLTDDL_S *ddl, SQLTCHP chp, + SQLTCHL_S *chlp, SQLTPRE *prep, SQLTSCA *scap); +SQLTAPI sqldes2(SQLTCUR cur, SQLTSLC_L slc, SQLTDDT *ddt, SQLTDDL_L *ddl, SQLTCHP chp, + SQLTCHL_L *chlp, SQLTPRE *prep, SQLTSCA *scap); +SQLTAPI sqldid(SQLTDAP dbname, SQLTDAL dbnamel); +SQLTAPI sqldii(SQLTCUR cur, SQLTSLC_S ivn, SQLTDAP inp, SQLTCHL_S *inlp); +SQLTAPI sqldii2(SQLTCUR cur, SQLTSLC_L ivn, SQLTDAP inp, SQLTCHL_L *inlp); +SQLTAPI sqldin(SQLTDAP dbnamp, SQLTDAL dbnaml); +SQLTAPI sqldir(SQLTSVN srvno, SQLTDAP buffer, SQLTDAL length); +SQLTAPI sqldis(SQLTCUR cur); +SQLTAPI sqldon(void); +SQLTAPI sqldox(SQLTSVH shandle, SQLTDAP dirnamep, SQLTFAT fattr); +SQLTAPI sqldrc(SQLTSVH cur); +SQLTAPI sqldro(SQLTSVH shandle, SQLTDAP dirname); +SQLTAPI sqldrr(SQLTSVH shandle, SQLTDAP filename); +SQLTAPI sqldrs(SQLTCUR cur, SQLTDAP rsp, SQLTDAL rsl); +SQLTAPI sqldsc(SQLTCUR cur, SQLTSLC_S slc, SQLTDDT *edt, SQLTDDL_S *edl, SQLTCHP chp, + SQLTCHL_S *chlp, SQLTPRE *prep, SQLTSCA *scap); +SQLTAPI sqldsc2(SQLTCUR cur, SQLTSLC_L slc, SQLTDDT *edt, SQLTDDL_L *edl, SQLTCHP chp, + SQLTCHL_L *chlp, SQLTPRE *prep, SQLTSCA *scap); +SQLTAPI sqldst(SQLTCUR cur, SQLTDAP cnp, SQLTDAL cnl); +SQLTAPI sqldsv(SQLTSVH shandle); +SQLTAPI sqlebk(SQLTCUR cur); +SQLTAPI sqlefb(SQLTCUR cur); +SQLTAPI sqlelo(SQLTCUR cur); +SQLTAPI sqlenl(SQLTCON hCon, SQLTDAP p1, SQLTDAL l1, SQLTDAP p2, SQLTDAL *l2_p); +SQLTAPI sqlenr(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel); +SQLTAPI sqlepo(SQLTCUR cur, SQLTEPO *epo); +SQLTAPI sqlerf(SQLTCUR cur); +SQLTAPI sqlerr(SQLTRCD error, SQLTDAP msg); +SQLTAPI sqlers(SQLTCUR cur); +SQLTAPI sqletx(SQLTRCD error, SQLTPTY msgtyp, SQLTDAP bfp, SQLTDAL bfl, SQLTDAL *txtlen); +SQLTAPI sqlexe(SQLTCUR cur); +SQLTAPI sqlexp(SQLTCUR cur, SQLTDAP buffer, SQLTDAL length); +SQLTAPI sqlfbk(SQLTCUR cur); +SQLTAPI sqlfer(SQLTRCD error, SQLTDAP msg); +SQLTAPI sqlfet(SQLTCUR cur); +SQLTAPI sqlfgt(SQLTSVH cur, SQLTDAP srvfile, SQLTDAP lclfile); +SQLTAPI sqlfpt(SQLTSVH cur, SQLTDAP srvfile, SQLTDAP lclfile); +SQLTAPI sqlfqn(SQLTCUR cur, SQLTFLD field, SQLTDAP nameptr, SQLTDAL *namelen); +SQLTAPI sqlgbi(SQLTCUR cur, SQLTCUR *pcur, SQLTPNM *ppnm); +SQLTAPI sqlgdi(SQLTCUR cur, SQLTGDI *gdi); +SQLTAPI sqlgdi2(SQLTCUR cur, SQLTGDI2 *gdi); +SQLTAPI sqlget(SQLTCUR cur, SQLTPTY parm, SQLTDAP p, SQLTDAL *l); +SQLTAPI sqlgfi(SQLTCUR cur, SQLTSLC_S slc, SQLTCDL_S *cvl, SQLTFSC *fsc); +SQLTAPI sqlgfi2(SQLTCUR cur, SQLTSLC_L slc, SQLTCDL_L *cvl, SQLTFSC *fsc); +SQLTAPI sqlgls(SQLTCUR cur, SQLTSLC_S slc, SQLTLSI *size); +SQLTAPI sqlgls2(SQLTCUR cur, SQLTSLC_L slc, SQLTLSI *size); +SQLTAPI sqlgnl(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel, SQLTLNG *lognum); +SQLTAPI sqlgnr(SQLTCUR cur, SQLTDAP tbnam, SQLTDAL tbnaml, SQLTROW *rows); +SQLTAPI sqlgsi(SQLTSVH shandle, SQLTFLG infoflags, SQLTDAP buffer, SQLTDAL buflen, + SQLTDAL *rbuflen); +SQLTAPI sqlgwo(SQLTCON hCon, SQLTDAP p, SQLTDAL *l); +SQLTAPI sqlidb(SQLTCUR cur); +SQLTAPI sqlims(SQLTCUR cur, SQLTDAL insize); +SQLTAPI sqlind(SQLTSVH shandle, SQLTDAP dbnamp, SQLTDAL dbnaml); +SQLTAPI sqlini(SQLTPFP callback); +SQLTAPI sqliniEx(SQLTDAP iniPath, SQLTDAL l); +SQLTAPI sqliniCfg(SQLTMOD operation, SQLTDAP cfg); +SQLTAPI sqliniCfgW(SQLTMOD operation, wchar_t *cfg); +SQLTAPI sqlins(SQLTSVN srvno, SQLTDAP dbnamp, SQLTDAL dbnaml, SQLTFLG createflag, + SQLTFLG overwrite); +SQLTAPI sqliqx(SQLTCON hCon, SQLTDAP p, SQLTDAL l, SQLTBOO *b); +SQLTAPI sqllab(SQLTCUR cur, SQLTSLC_S slc, SQLTCHP lbp, SQLTCHL_S *lblp); +SQLTAPI sqllab2(SQLTCUR cur, SQLTSLC_L slc, SQLTCHP lbp, SQLTCHL_L *lblp); +SQLTAPI sqlldp(SQLTCUR cur, SQLTDAP cmdp, SQLTDAL cmdl); +SQLTAPI sqllsk(SQLTCUR cur, SQLTSLC_S slc, SQLTLSI pos); +SQLTAPI sqllsk2(SQLTCUR cur, SQLTSLC_L slc, SQLTLSI pos); +SQLTAPI sqlmcl(SQLTSVH shandle, SQLTFLH fd); +SQLTAPI sqlmdl(SQLTSVH shandle, SQLTDAP filename); +SQLTAPI sqlmls(SQLTSVH shandle, SQLTFLH fd, SQLTLLI offset, SQLTWNC whence, + SQLTLLI *roffset); +SQLTAPI sqlmop(SQLTSVH shandle, SQLTFLH *fdp, SQLTDAP filename, SQLTFMD openmode); +SQLTAPI sqlmrd(SQLTSVH shandle, SQLTFLH fd, SQLTDAP buffer, SQLTDAL len, SQLTDAL *rlen); +SQLTAPI sqlmsk(SQLTSVH shandle, SQLTFLH fd, SQLTLNG offset, SQLTWNC whence, + SQLTLNG *roffset); +SQLTAPI sqlmwr(SQLTSVH shandle, SQLTFLH fd, SQLTDAP buffer, SQLTDAL len, SQLTDAL *rlen); +SQLTAPI sqlnbv(SQLTCUR cur, SQLTNBV_S *nbv); +SQLTAPI sqlnbv2(SQLTCUR cur, SQLTNBV_L *nbv); +SQLTAPI sqlnii(SQLTCUR cur, SQLTNSI_S *nii); +SQLTAPI sqlnii2(SQLTCUR cur, SQLTNSI_L *nii); +SQLTAPI sqlnrr(SQLTCUR cur, SQLTROW *rcountp); +SQLTAPI sqlnsi(SQLTCUR cur, SQLTNSI_S *nsi); +SQLTAPI sqlnsi2(SQLTCUR cur, SQLTNSI_L *nsi); +SQLTAPI sqloms(SQLTCUR cur, SQLTDAL outsize); +SQLTAPI sqlopc(SQLTCUR *curp, SQLTCON hCon, SQLTMOD fType); +SQLTAPI sqlprs(SQLTCUR cur, SQLTROW row); +SQLTAPI sqlrbf(SQLTCUR cur, SQLTRBF *rbf); +SQLTAPI sqlrbk(SQLTCUR cur); +SQLTAPI sqlrcd(SQLTCUR cur, SQLTRCD *rcd); +SQLTAPI sqlrdb(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel, SQLTFNP bkpdir, + SQLTFNL bkpdirl, SQLTBOO local, SQLTBOO over); +SQLTAPI sqlrdc(SQLTCUR cur, SQLTDAP bufp, SQLTDAL bufl, SQLTDAL *readl); +SQLTAPI sqlrel(SQLTCUR cur); +SQLTAPI sqlres(SQLTCUR *curptr, SQLTFNP bkfname, SQLTFNL bkfnlen, SQLTSVN bkfserv, + SQLTBOO overwrt, SQLTDAP dbname, SQLTDAL dbnlen, SQLTSVN dbserv); +SQLTAPI sqlret(SQLTCUR cur, SQLTDAP cnp, SQLTDAL cnl); +SQLTAPI sqlrlf(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel, SQLTFNP bkpdir, + SQLTFNL bkpdirl, SQLTBOO local, SQLTBOO over); +SQLTAPI sqlrlo(SQLTCUR cur, SQLTSLC_S slc, SQLTDAP bufp, SQLTDAL bufl, SQLTDAL *readl); +SQLTAPI sqlrlo2(SQLTCUR cur, SQLTSLC_L slc, SQLTDAP bufp, SQLTDAL bufl, SQLTDAL *readl, + SQLTPDT pdt); +SQLTAPI sqlrof(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel, SQLTRFM mode, + SQLTDAP datetime, SQLTDAL datetimel); +SQLTAPI sqlrow(SQLTCUR cur, SQLTROW *row); +SQLTAPI sqlrrd(SQLTCUR cur); +SQLTAPI sqlrrs(SQLTCUR cur, SQLTDAP rsp, SQLTDAL rsl); +SQLTAPI sqlrsi(SQLTSVH shandle); +SQLTAPI sqlrss(SQLTSVH shandle, SQLTDAP dbname, SQLTDAL dbnamel, SQLTFNP bkpdir, + SQLTFNL bkpdirl, SQLTBOO local, SQLTBOO over); +SQLTAPI sqlsab(SQLTSVH shandle, SQLTPNM pnum); +SQLTAPI sqlsap(SQLTSVN srvno, SQLTDAP password, SQLTPNM pnum); +SQLTAPI sqlscl(SQLTCUR cur, SQLTDAP namp, SQLTDAL naml); +SQLTAPI sqlscn(SQLTCUR cur, SQLTDAP namp, SQLTDAL naml); +SQLTAPI sqlscp(SQLTNPG pages); +SQLTAPI sqlsdn(SQLTDAP dbnamp, SQLTDAL dbnaml); +SQLTAPI sqlsds(SQLTSVH shandle, SQLTFLG shutdownflg); +SQLTAPI sqlsdx(SQLTSVH shandle, SQLTDAP dbnamp, SQLTDAL dbnaml, SQLTFLG shutdownflg); +SQLTAPI sqlset(SQLTCUR cur, SQLTPTY parm, SQLTDAP p, SQLTDAL l); +SQLTAPI sqlsil(SQLTCUR cur, SQLTILV isolation); +SQLTAPI sqlslp(SQLTCUR cur, SQLTNPG lpt, SQLTNPG lpm); +SQLTAPI sqlspr(SQLTCUR cur); +SQLTAPI sqlsrf(SQLTCUR cur, SQLTDAP fnp, SQLTDAL fnl); +SQLTAPI sqlsrs(SQLTCUR cur); +SQLTAPI sqlssb(SQLTCUR cur, SQLTSLC_S slc, SQLTPDT pdt, SQLTDAP pbp, SQLTPDL_S pdl, + SQLTSCA sca, SQLTCDL_S *pcv, SQLTFSC *pfc); +SQLTAPI sqlssb2(SQLTCUR cur, SQLTSLC_L slc, SQLTPDT pdt, SQLTDAP pbp, SQLTPDL_L pdl, + SQLTSCA sca, SQLTCDL_L *pcv, SQLTFSC *pfc); +SQLTAPI sqlsss(SQLTCUR cur, SQLTDAL size); +SQLTAPI sqlsta(SQLTCUR cur, SQLTSTC *svr, SQLTSTC *svw, SQLTSTC *spr, SQLTSTC *spw); +SQLTAPI sqlstm(SQLTSVH shandle); +SQLTAPI sqlsto(SQLTCUR cur, SQLTDAP cnp, SQLTDAL cnl, SQLTDAP ctp, SQLTDAL ctl); +SQLTAPI sqlstr(SQLTCUR cur); +SQLTAPI sqlsxt(SQLTSVN srvno, SQLTDAP password); +SQLTAPI sqlsys(SQLTCUR cur, SQLTSYS *sys); +SQLTAPI sqltec(SQLTRCD rcd, SQLTRCD *np); +SQLTAPI sqltem(SQLTCUR cur, SQLTXER *xer, SQLTPTY msgtyp, SQLTDAP bfp, SQLTDAL bfl, + SQLTDAL *txtlen); +SQLTAPI sqltio(SQLTCUR cur, SQLTTIV _timeout); +SQLTAPI sqlunl(SQLTCUR cur, SQLTDAP cmdp, SQLTDAL cmdl); +SQLTAPI sqlurs(SQLTCUR cur); +SQLTAPI sqlwdc(SQLTCUR cur, SQLTDAP bufp, SQLTDAL bufl); +SQLTAPI sqlwlo(SQLTCUR cur, SQLTDAP bufp, SQLTDAL bufl); +SQLTAPI sqlxad(SQLTNMP op, SQLTNMP np1, SQLTNML nl1, SQLTNMP np2, SQLTNML nl2); +SQLTAPI sqlxcn(SQLTNMP op, SQLTDAP ip, SQLTDAL il); +SQLTAPI sqlxda(SQLTNMP op, SQLTNMP dp, SQLTNML dl, SQLTDAY days); +SQLTAPI sqlxdp(SQLTDAP op, SQLTDAL ol, SQLTNMP ip, SQLTNML il, SQLTDAP pp, SQLTDAL pl); +SQLTAPI sqlxdv(SQLTNMP op, SQLTNMP np1, SQLTNML nl1, SQLTNMP np2, SQLTNML nl2); +SQLTAPI sqlxer(SQLTCUR cur, SQLTXER *errnum, SQLTDAP errbuf, SQLTDAL *buflen); +SQLTAPI sqlxml(SQLTNMP op, SQLTNMP np1, SQLTNML nl1, SQLTNMP np2, SQLTNML nl2); +SQLTAPI sqlxnp(SQLTDAP outp, SQLTDAL outl, SQLTNMP isnp, SQLTNML isnl, SQLTDAP picp, + SQLTDAL picl); +SQLTAPI sqlxpd(SQLTNMP op, SQLTNML *olp, SQLTDAP ip, SQLTDAP pp, SQLTDAL pl); +SQLTAPI sqlxsb(SQLTNMP op, SQLTNMP np1, SQLTNML nl1, SQLTNMP np2, SQLTNML nl2); +SQLTAPI sqlgai(SQLTCUR cur, SQLTDAP uname, SQLTDAL unamel, SQLTDAP tname, SQLTDAL tnamel, + SQLTROW *seed, SQLTROW *step, SQLTROW *next); +SQLTAPI sqlnvc(SQLTCUR cur, SQLTDAP ip, SQLTDAP op, SQLTDAL ol); +SQLTAPI sqlnvcW(SQLTCUR cur, wchar_t *ip, wchar_t *op, SQLTDAL ol); + +#if SQLBASE_DEFINE_WIDE_COLUMNS && SQLBASE_REDEFINE_TO_WIDE_FUNCTIONS +#define sqlbln(cur, bnn) sqlbln2(cur, bnn, SQLPLON) +#define sqlbnn(cur, bnn, dap, dal, sca, pdt) sqlbnn2(cur, bnn, dap, dal, sca, pdt) +#define sqlbnu sqlbnu2 +#define sqldes sqldes2 +#define sqldii sqldii2 +#define sqldsc sqldsc2 +#define sqlgfi sqlgfi2 +#define sqlgls sqlgls2 +#define sqllab sqllab2 +#define sqllsk sqllsk2 +#define sqlnbv sqlnbv2 +#define sqlnii sqlnii2 +#define sqlnsi sqlnsi2 +#define sqlrlo(cur, slc, bufp, bufl, readl) sqlrlo2(cur, slc, bufp, bufl, readl, SQLPLON) +#define sqlssb sqlssb2 +#endif + +#define SQLF000 0 /* not a function */ +#define SQLFINI 1 /* SQL INItialize applications use of the database */ +#define SQLFDON 2 /* SQL DONe using database */ +#define SQLFCON 3 /* SQL CONnect to a cursor/database */ +#define SQLFDIS 4 /* SQL DISconnect from a cursor/database */ +#define SQLFCOM 5 /* SQL COMpile a SQL command */ +#define SQLFEXE 6 /* SQL EXEcute an SQL command */ +#define SQLFCEX 7 /* SQL Compile and EXecute a SQL command */ +#define SQLFCMT 8 /* SQL CoMmiT a transaction to the database */ +#define SQLFDES 9 /* SQL DEScribe the items of a select statement */ +#define SQLFGFI 10 /* SQL Get Fetch Information */ +#define SQLFFBK 11 /* SQL FETch previous row from SELECT */ +#define SQLFFET 12 /* SQL FETch next row from SELECT */ +#define SQLFEFB 13 /* SQL Enable Fetch Backwards */ +#define SQLFPRS 14 /* SQL Position in Result Set */ +#define SQLFURS 15 /* SQL Undo Result Set */ +#define SQLFNBV 16 /* SQL get Number of Bind Variables */ +#define SQLFBND 17 /* SQL BiNd Data variables. This function is supercede */ +#define SQLFBNN 18 /* SQL BiNd Numerics */ +#define SQLFBLN 19 /* SQL Bind Long Number */ +#define SQLFBLD 20 /* SQL Bind Long Data variables */ +#define SQLFSRS 21 /* SQL Start Restriction Set processing */ +#define SQLFRRS 22 /* SQL Restart Restriction Set processing */ +#define SQLFCRS 23 /* SQL Close Restriction Set */ +#define SQLFDRS 24 /* SQL Drop Restriction Set */ +#define SQLFARF 25 /* SQL Apply Roll Forward journal */ +#define SQLFERF 26 /* SQL End RollForward recovery (no longer supported) */ +#define SQLFSRF 27 /* SQL Start Roll Forward journal */ +#define SQLFSTO 28 /* SQL STOre a compiled SQL command */ +#define SQLFRET 29 /* SQL RETrieve a compiled SQL command */ +#define SQLFDST 30 /* SQL Drop a STored command */ +#define SQLFCTY 31 /* SQL get Command TYpe */ +#define SQLFEPO 32 /* SQL get Error POsition */ +#define SQLFGNR 33 /* SQL Get Number of Rows */ +#define SQLFNSI 34 /* SQL get Number of Select Items */ +#define SQLFRBF 35 /* SQL get Roll Back Flag */ +#define SQLFRCD 36 /* SQL get Return CoDe */ +#define SQLFROW 37 /* SQL get number of ROWs */ +#define SQLFSCN 38 /* SQL Set Cursor Name */ +#define SQLFSIL 39 /* SQL Set Isolation Level */ +#define SQLFSLP 40 /* SQL Set Log Parameters */ +#define SQLFSSB 41 /* SQL Set Select Buffer */ +#define SQLFSSS 42 /* SQL Set SortSpace */ +#define SQLFRLO 43 /* SQL Read LOng */ +#define SQLFWLO 44 /* SQL Write LOng */ +#define SQLFLSK 45 /* SQL Long SeeK */ +#define SQLFGLS 46 /* SQL Get Long Size */ +#define SQLFELO 47 /* SQL End Long Operation */ +#define SQLFRBK 48 /* SQL RollBacK a transaction from the database */ +#define SQLFERR 49 /* SQL get ERRor message */ +#define SQLFCPY 50 /* SQL CoPY */ +#define SQLFIDB 51 /* SQL Initialize DataBase */ +#define SQLFSYS 52 /* SQL SYSTEM */ +#define SQLFSTA 53 /* SQL STAtistics */ +#define SQLFR02 54 /* SQL RESERVED */ +#define SQLFXAD 55 /* SQL eXtra ADd */ +#define SQLFXCN 56 /* SQL eXtra Character to NUmber */ +#define SQLFXDA 57 /* SQL eXtra Date Add */ +#define SQLFXDP 58 /* SQL eXtra convert SQLBASE Date to Picture */ +#define SQLFXDV 59 /* SQL eXtra DiVide */ +#define SQLFXML 60 /* SQL eXtra MuLtiply */ +#define SQLFXNP 61 /* SQL eXtra convert SQLBASE Numeric to Picture */ +#define SQLFXPD 62 /* SQL eXtra convert Picture to SQLBASE Date. */ +#define SQLFXSB 63 /* SQL eXtra SuBtract */ +#define SQLFINS 64 /* SQL INStall database (no longer supported) */ +#define SQLFDIN 65 /* SQL DeINstall database (no longer supported) */ +#define SQLFDIR 66 /* SQL DIRectory of databases */ +#define SQLFTIO 67 /* SQL TImeOut */ +#define SQLFFQN 68 /* SQL get Fully Qualified column Name */ +#define SQLFEXP 69 /* SQL EXexcution Plan */ +#define SQLFFER 70 /* SQL Full ERror message */ +#define SQLFBKP 71 /* SQL BacKuP */ +#define SQLFRDC 72 /* SQL Read Database Chunk */ +#define SQLFEBK 73 /* SQL End network online BacKup */ +#define SQLFRES 74 /* SQL REStore from backup */ +#define SQLFWDC 75 /* SQL Write Database Chunk */ +#define SQLFRRD 76 /* SQL Recover Restored Database */ +#define SQLFERS 77 /* SQL End network ReStore */ +#define SQLFNRR 78 /* SQL Number of Rows in Result set */ +#define SQLFSTR 79 /* SQL STart Restriction mode */ +#define SQLFSPR 80 /* SQL StoP Restriction mode */ +#define SQLFCNC 81 /* SQL CoNneCt: the sequel. */ +#define SQLFCNR 82 /* SQL Connect with No Recovery */ +#define SQLFOMS 83 /* SQL set Output Message Size */ +#define SQLFIMS 84 /* SQL set Input Message Size */ +#define SQLFSCP 85 /* SQL Set Cache Pages */ +#define SQLFDSC 86 /* SQL DeSCribe item of SELECT with external type */ +#define SQLFLAB 87 /* SQL get LABel information */ +#define SQLFCBV 88 /* SQL Clear Bind Variables */ +#define SQLFGET 89 /* SQL GET database parameter */ +#define SQLFSET 90 /* SQL SET database parameter */ +#define SQLFTEC 91 /* SQL Translate Error Code */ +#define SQLFBDB 92 /* SQL Backup DataBase */ +#define SQLFBEF 93 /* SQL Bulk Execute Flush */ +#define SQLFBER 94 /* SQL get Bulk Execute Returned code */ +#define SQLFBLF 95 /* SQL Backup Log Files */ +#define SQLFBLK 96 /* SQL set BuLK insert mode */ +#define SQLFBSS 97 /* SQL Backup SnapShot */ +#define SQLFCAN 98 /* SQL CaNceL command */ +#define SQLFCLF 99 /* SQL Change server activity LogFile */ +#define SQLFCRE 100 /* SQL CREate database */ +#define SQLFCRF 101 /* SQL Continue RollForward recovery */ +#define SQLFCSV 102 /* SQL Connect to SerVer */ +#define SQLFDBN 103 /* SQL Directory By Name */ +#define SQLFDED 104 /* SQL DeINstall database */ +#define SQLFDEL 105 /* SQL DELete database */ +#define SQLFDID 106 /* SQL DeInstall database and Delete database files */ +#define SQLFDRC 107 /* SQL DiRectory Close */ +#define SQLFDRO 108 /* SQL DiRectory Open */ +#define SQLFDRR 109 /* SQL DiRectory Read */ +#define SQLFDSV 110 /* SQL Disconnect from SerVer */ +#define SQLFENR 111 /* SQL ENd Rollforward recovery */ +#define SQLFFGT 112 /* SQL File GeT */ +#define SQLFFPT 113 /* SQL File Put */ +#define SQLFGNL 114 /* SQL Get Next Log for rollforward */ +#define SQLFGSI 115 /* SQL Get Server Information */ +#define SQLFIND 116 /* SQL INstall Database */ +#define SQLFMCL 117 /* SQL reMote CLose server file */ +#define SQLFMDL 118 /* SQL reMote DeLete file or directory on remote server */ +#define SQLFMOP 119 /* SQL reMote OPen file on server */ +#define SQLFMRD 120 /* SQL reMote ReaD from file on server */ +#define SQLFMSK 121 /* SQL reMote SeeK into file on server */ +#define SQLFMWR 122 /* SQL reMote WRite to file on server */ +#define SQLFRDB 123 /* SQL Restore DataBase */ +#define SQLFREL 124 /* SQL RELease log */ +#define SQLFRLF 125 /* SQL Restore Log Files */ +#define SQLFROF 126 /* SQL ROllForward recovery */ +#define SQLFRSS 127 /* SQL Restore SnapShot */ +#define SQLFSAB 128 /* SQL Server ABort process */ +#define SQLFSAP 129 /* SQL Server Abort Process */ +#define SQLFSDN 130 /* SQL ShutDowN database */ +#define SQLFSTM 131 /* SQL Server TerMinate */ +#define SQLFBBR 132 /* SQL get Bulk Execute Backend error # and message */ +#define SQLFBNA 133 /* SQL BiNd Data variables by name */ +#define SQLFBNU 134 /* SQL BiNd Numerical bind variable */ +#define SQLFGDI 135 /* SQL Get Descriptor info for a given Select column. */ +#define SQLFSXT 136 /* SQL Server eXiT (no longer supported) */ +#define SQLFXER 137 /* SQL get backend (Extended) error number and Message */ +#define SQLFETX 138 /* SQL get Error message TeXt */ +#define SQLFTEM 139 /* SQL get Tokenized Error Message */ +#define SQLFSCL 140 /* SQL Set CLient name */ +#define SQLFLDP 141 /* SQL LoaD oPeration */ +#define SQLFUNL 142 /* SQL UNLoad command */ +#define SQLFGBI 143 /* SQL Get Backend cursor Information */ +#define SQLFNII 144 /* SQL get Number of Into variable Information */ +#define SQLFDII 145 /* SQL Describe Into variable Information */ +#define SQLFSDS 146 /* SQL Shutdown/enable server */ +#define SQLFSDX 147 /* SQL Shutdown/enable Database Extended */ +#define SQLFCDR 148 /* SQL Cancel Database Request */ +#define SQLFDOX 149 /* SQL Directory Open Extended */ +#define SQLFRSI 150 /* SQL Reset Statistical Information */ +#define SQLFCCH 151 /* SQL Create Connection Handle */ +#define SQLFOPC 152 /* SQL OPen Cursor */ +#define SQLFDCH 153 /* SQL Destroy Connection Handle */ +#define SQLFENL 154 /* SQL MTS Enlist */ +#define SQLFGWO 155 /* SQL MTS Get Whereabouts Object */ +#define SQLFMLS 156 /* SQL reMote Long SeeK into file on server */ +#define SQLFIQX 157 /* SQL MTS Query a transaction's status */ +#define SQLFGAI 158 /* Get auto_increment values */ +#define SQLFNVC 159 // Name/Value Command + +#define SQLFMINAPI SQLFINI /* change these when API entry */ +#define SQLFMAXAPI SQLFGAI /* points change */ + +/* Following section is for SQL.INI free connections (sqliniCfg) */ +#define SQLCFGFADD 0 /* Add config setting */ +#define SQLCFGFDEL 1 /* Delete config setting, only works for database/server entries */ + +#pragma pack(pop) + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* SQLBASE_H_ */ diff --git a/libraries/SQLAPI/include/ssNcliAPI.h b/libraries/SQLAPI/include/ssNcliAPI.h index 700e8a3aa..20f709ca2 100644 --- a/libraries/SQLAPI/include/ssNcliAPI.h +++ b/libraries/SQLAPI/include/ssNcliAPI.h @@ -1,66 +1,66 @@ -// SQL Server Native API -// -////////////////////////////////////////////////////////////////////// - -#if !defined(__SSNCLIAPI_H__) -#define __SSNCLIAPI_H__ - -#include "SQLAPI.h" - -// MSVC++ 6.0 doesn't have this -#ifdef SQLAPI_WINDOWS -#ifndef DBROWCOUNT -#ifdef _WIN64 -typedef LONGLONG DBROWCOUNT; -#else -typedef LONG DBROWCOUNT; -#endif -#endif -#ifndef DBCOUNTITEM -#ifdef _WIN64 -typedef ULONGLONG DBCOUNTITEM; -#else -typedef ULONG DBCOUNTITEM; -#endif -#endif -#ifndef DBORDINAL -#ifdef _WIN64 -typedef ULONGLONG DBORDINAL; -#else -typedef ULONG DBORDINAL; -#endif -#endif -#ifndef DB_UPARAMS -#ifdef _WIN64 -typedef ULONGLONG DB_UPARAMS; -#else -typedef ULONG DB_UPARAMS; -#endif -#endif -#ifndef SQLLEN -#ifdef _WIN64 -typedef INT64 SQLLEN; -#else -#define SQLLEN SQLINTEGER -#endif -#endif -#ifndef SQLULEN -#ifdef _WIN64 -typedef UINT64 SQLULEN; -#else -#define SQLULEN SQLUINTEGER -#endif -#endif -#ifndef SQLSETPOSIROW -#ifdef _WIN64 -typedef UINT64 SQLSETPOSIROW; -#else -#define SQLSETPOSIROW SQLUSMALLINT -#endif -#endif -#endif - -#define SQLNCLI_NO_BCP +// SQL Server Native API +// +////////////////////////////////////////////////////////////////////// + +#if !defined(__SSNCLIAPI_H__) +#define __SSNCLIAPI_H__ + +#include "SQLAPI.h" + +// MSVC++ 6.0 doesn't have this +#ifdef SQLAPI_WINDOWS +#ifndef DBROWCOUNT +#ifdef _WIN64 +typedef LONGLONG DBROWCOUNT; +#else +typedef LONG DBROWCOUNT; +#endif +#endif +#ifndef DBCOUNTITEM +#ifdef _WIN64 +typedef ULONGLONG DBCOUNTITEM; +#else +typedef ULONG DBCOUNTITEM; +#endif +#endif +#ifndef DBORDINAL +#ifdef _WIN64 +typedef ULONGLONG DBORDINAL; +#else +typedef ULONG DBORDINAL; +#endif +#endif +#ifndef DB_UPARAMS +#ifdef _WIN64 +typedef ULONGLONG DB_UPARAMS; +#else +typedef ULONG DB_UPARAMS; +#endif +#endif +#ifndef SQLLEN +#ifdef _WIN64 +typedef INT64 SQLLEN; +#else +#define SQLLEN SQLINTEGER +#endif +#endif +#ifndef SQLULEN +#ifdef _WIN64 +typedef UINT64 SQLULEN; +#else +#define SQLULEN SQLUINTEGER +#endif +#endif +#ifndef SQLSETPOSIROW +#ifdef _WIN64 +typedef UINT64 SQLSETPOSIROW; +#else +#define SQLSETPOSIROW SQLUSMALLINT +#endif +#endif +#endif + +#define SQLNCLI_NO_BCP #define _SQLNCLI_OLEDB_IGNORE_DEPRECATION_WARNING_ #define _SQLUSERINSTANCE_H_ #ifndef __deref_out @@ -68,494 +68,496 @@ typedef UINT64 SQLSETPOSIROW; #define __in_bcount #define __in_z #define __in -#endif - -// API header(s) -#include -#include -#ifdef SQLAPI_WINDOWS -#include -#else -#include -#endif - -extern void AddNCliSupport(const SAConnection *pCon); -extern void ReleaseNCliSupport(); - -typedef SQLRETURN (SQL_API *SQLAllocHandle_t)(SQLSMALLINT HandleType, - SQLHANDLE InputHandle, SQLHANDLE *OutputHandle); -typedef SQLRETURN (SQL_API *SQLBindCol_t)( - SQLHSTMT StatementHandle, - SQLUSMALLINT ColumnNumber, - SQLSMALLINT TargetType, - SQLPOINTER TargetValue, - SQLLEN BufferLength, - SQLLEN *StrLen_or_Ind); -typedef SQLRETURN (SQL_API *SQLBindParameter_t)( - SQLHSTMT hstmt, - SQLUSMALLINT ipar, - SQLSMALLINT fParamType, - SQLSMALLINT fCType, - SQLSMALLINT fSqlType, - SQLULEN cbColDef, - SQLSMALLINT ibScale, - SQLPOINTER rgbValue, - SQLLEN cbValueMax, - SQLLEN *pcbValue); -typedef SQLRETURN (SQL_API *SQLBulkOperations_t)( - SQLHSTMT StatementHandle, - SQLSMALLINT Operation); -typedef SQLRETURN (SQL_API *SQLBrowseConnectW_t)( - SQLHDBC hdbc, - SQLWCHAR *szConnStrIn, - SQLSMALLINT cbConnStrIn, - SQLWCHAR *szConnStrOut, - SQLSMALLINT cbConnStrOutMax, - SQLSMALLINT *pcbConnStrOut); -typedef SQLRETURN (SQL_API *SQLCancel_t)(SQLHSTMT StatementHandle); -typedef SQLRETURN (SQL_API *SQLCloseCursor_t)(SQLHSTMT StatementHandle); -#if defined(_WIN64) || defined(SA_64BIT) -typedef SQLRETURN (SQL_API *SQLColAttributeW_t)( - SQLHSTMT hstmt, - SQLUSMALLINT iCol, - SQLUSMALLINT iField, - SQLPOINTER pCharAttr, - SQLSMALLINT cbCharAttrMax, - SQLSMALLINT *pcbCharAttr, - SQLLEN *pNumAttr); -#else -typedef SQLRETURN (SQL_API *SQLColAttributeW_t)( - SQLHSTMT hstmt, - SQLUSMALLINT iCol, - SQLUSMALLINT iField, - SQLPOINTER pCharAttr, - SQLSMALLINT cbCharAttrMax, - SQLSMALLINT *pcbCharAttr, - SQLPOINTER pNumAttr); -#endif -typedef SQLRETURN (SQL_API *SQLColumnPrivilegesW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCatalogName, - SQLSMALLINT cbCatalogName, - SQLWCHAR *szSchemaName, - SQLSMALLINT cbSchemaName, - SQLWCHAR *szTableName, - SQLSMALLINT cbTableName, - SQLWCHAR *szColumnName, - SQLSMALLINT cbColumnName); -typedef SQLRETURN (SQL_API *SQLColumnsW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCatalogName, - SQLSMALLINT cbCatalogName, - SQLWCHAR *szSchemaName, - SQLSMALLINT cbSchemaName, - SQLWCHAR *szTableName, - SQLSMALLINT cbTableName, - SQLWCHAR *szColumnName, - SQLSMALLINT cbColumnName); -typedef SQLRETURN (SQL_API *SQLConnectW_t)( - SQLHDBC hdbc, - SQLWCHAR *szDSN, - SQLSMALLINT cbDSN, - SQLWCHAR *szUID, - SQLSMALLINT cbUID, - SQLWCHAR *szAuthStr, - SQLSMALLINT cbAuthStr); -typedef SQLRETURN (SQL_API *SQLCopyDesc_t)(SQLHDESC SourceDescHandle, - SQLHDESC TargetDescHandle); -typedef SQLRETURN (SQL_API *SQLDescribeColW_t)( - SQLHSTMT hstmt, - SQLUSMALLINT icol, - SQLWCHAR *szColName, - SQLSMALLINT cbColNameMax, - SQLSMALLINT *pcbColName, - SQLSMALLINT *pfSqlType, - SQLULEN *pcbColDef, - SQLSMALLINT *pibScale, - SQLSMALLINT *pfNullable); -typedef SQLRETURN (SQL_API *SQLDescribeParam_t)( - SQLHSTMT hstmt, - SQLUSMALLINT ipar, - SQLSMALLINT *pfSqlType, - SQLULEN *pcbParamDef, - SQLSMALLINT *pibScale, - SQLSMALLINT *pfNullable); -typedef SQLRETURN (SQL_API *SQLDisconnect_t)(SQLHDBC ConnectionHandle); -typedef SQLRETURN (SQL_API *SQLDriverConnectW_t)( - SQLHDBC hdbc, - SQLHWND hwnd, - SQLWCHAR *szConnStrIn, - SQLSMALLINT cbConnStrIn, - SQLWCHAR *szConnStrOut, - SQLSMALLINT cbConnStrOutMax, - SQLSMALLINT *pcbConnStrOut, - SQLUSMALLINT fDriverCompletion); -typedef SQLRETURN (SQL_API *SQLEndTran_t)(SQLSMALLINT HandleType, SQLHANDLE Handle, - SQLSMALLINT CompletionType); -typedef SQLRETURN (SQL_API *SQLExecDirectW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szSqlStr, - SQLINTEGER cbSqlStr); -typedef SQLRETURN (SQL_API *SQLExecute_t)(SQLHSTMT StatementHandle); -typedef SQLRETURN (SQL_API *SQLExtendedFetch_t)( - SQLHSTMT hstmt, - SQLUSMALLINT fFetchType, - SQLLEN irow, - SQLULEN *pcrow, - SQLUSMALLINT *rgfRowStatus); -typedef SQLRETURN (SQL_API *SQLFetch_t)(SQLHSTMT StatementHandle); -typedef SQLRETURN (SQL_API *SQLFetchScroll_t)( - SQLHSTMT StatementHandle, - SQLSMALLINT FetchOrientation, - SQLLEN FetchOffset); -typedef SQLRETURN (SQL_API *SQLFreeHandle_t)(SQLSMALLINT HandleType, SQLHANDLE Handle); -typedef SQLRETURN (SQL_API *SQLFreeStmt_t)(SQLHSTMT StatementHandle, - SQLUSMALLINT Option); -typedef SQLRETURN (SQL_API *SQLForeignKeysW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szPkCatalogName, - SQLSMALLINT cbPkCatalogName, - SQLWCHAR *szPkSchemaName, - SQLSMALLINT cbPkSchemaName, - SQLWCHAR *szPkTableName, - SQLSMALLINT cbPkTableName, - SQLWCHAR *szFkCatalogName, - SQLSMALLINT cbFkCatalogName, - SQLWCHAR *szFkSchemaName, - SQLSMALLINT cbFkSchemaName, - SQLWCHAR *szFkTableName, - SQLSMALLINT cbFkTableName); -typedef SQLRETURN (SQL_API *SQLGetConnectAttrW_t)( - SQLHDBC hdbc, - SQLINTEGER fAttribute, - SQLPOINTER rgbValue, - SQLINTEGER cbValueMax, - SQLINTEGER *pcbValue); -typedef SQLRETURN (SQL_API *SQLGetConnectOptionW_t)( - SQLHDBC hdbc, - SQLUSMALLINT fOption, - SQLPOINTER pvParam); -typedef SQLRETURN (SQL_API *SQLGetCursorNameW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCursor, - SQLSMALLINT cbCursorMax, - SQLSMALLINT *pcbCursor); -typedef SQLRETURN (SQL_API *SQLGetData_t)( - SQLHSTMT StatementHandle, - SQLUSMALLINT ColumnNumber, - SQLSMALLINT TargetType, - SQLPOINTER TargetValue, - SQLLEN BufferLength, - SQLLEN *StrLen_or_Ind); -typedef SQLRETURN (SQL_API *SQLGetDescFieldW_t)( - SQLHDESC hdesc, - SQLSMALLINT iRecord, - SQLSMALLINT iField, - SQLPOINTER rgbValue, - SQLINTEGER cbValueMax, - SQLINTEGER *pcbValue); -typedef SQLRETURN (SQL_API *SQLGetDescRecW_t)( - SQLHDESC hdesc, - SQLSMALLINT iRecord, - SQLWCHAR *szName, - SQLSMALLINT cbNameMax, - SQLSMALLINT *pcbName, - SQLSMALLINT *pfType, - SQLSMALLINT *pfSubType, - SQLLEN *pLength, - SQLSMALLINT *pPrecision, - SQLSMALLINT *pScale, - SQLSMALLINT *pNullable); -typedef SQLRETURN (SQL_API *SQLGetDiagFieldW_t)( - SQLSMALLINT fHandleType, - SQLHANDLE handle, - SQLSMALLINT iRecord, - SQLSMALLINT fDiagField, - SQLPOINTER rgbDiagInfo, - SQLSMALLINT cbDiagInfoMax, - SQLSMALLINT *pcbDiagInfo); -typedef SQLRETURN (SQL_API *SQLGetDiagRecW_t)( - SQLSMALLINT fHandleType, - SQLHANDLE handle, - SQLSMALLINT iRecord, - SQLWCHAR *szSqlState, - SQLINTEGER *pfNativeError, - SQLWCHAR *szErrorMsg, - SQLSMALLINT cbErrorMsgMax, - SQLSMALLINT *pcbErrorMsg); -typedef SQLRETURN (SQL_API *SQLGetEnvAttr_t)( - SQLHENV EnvironmentHandle, - SQLINTEGER Attribute, - SQLPOINTER Value, - SQLINTEGER BufferLength, - SQLINTEGER *StringLength); -typedef SQLRETURN (SQL_API *SQLGetFunctions_t)( - SQLHDBC ConnectionHandle, - SQLUSMALLINT FunctionId, - SQLUSMALLINT *Supported); -typedef SQLRETURN (SQL_API *SQLGetInfoW_t)( - SQLHDBC hdbc, - SQLUSMALLINT fInfoType, - SQLPOINTER rgbInfoValue, - SQLSMALLINT cbInfoValueMax, - SQLSMALLINT *pcbInfoValue); -typedef SQLRETURN (SQL_API *SQLGetTypeInfoW_t)( - SQLHSTMT StatementHandle, - SQLSMALLINT DataType); -typedef SQLRETURN (SQL_API *SQLGetStmtAttrW_t)( - SQLHSTMT hstmt, - SQLINTEGER fAttribute, - SQLPOINTER rgbValue, - SQLINTEGER cbValueMax, - SQLINTEGER *pcbValue); -typedef SQLRETURN (SQL_API *SQLMoreResults_t)( - SQLHSTMT hstmt); -typedef SQLRETURN (SQL_API *SQLNativeSqlW_t)( - SQLHDBC hdbc, - SQLWCHAR *szSqlStrIn, - SQLINTEGER cbSqlStrIn, - SQLWCHAR *szSqlStr, - SQLINTEGER cbSqlStrMax, - SQLINTEGER *pcbSqlStr); -typedef SQLRETURN (SQL_API *SQLNumParams_t)( - SQLHSTMT hstmt, - SQLSMALLINT *pcpar); -typedef SQLRETURN (SQL_API *SQLNumResultCols_t)( - SQLHSTMT StatementHandle, - SQLSMALLINT *ColumnCount); -typedef SQLRETURN (SQL_API *SQLParamData_t)( - SQLHSTMT StatementHandle, - SQLPOINTER *Value); -typedef SQLRETURN (SQL_API *SQLParamOptions_t)( - SQLHSTMT hstmt, - SQLULEN crow, - SQLULEN *pirow); -typedef SQLRETURN (SQL_API *SQLPrepareW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szSqlStr, - SQLINTEGER cbSqlStr); -typedef SQLRETURN (SQL_API *SQLPrimaryKeysW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCatalogName, - SQLSMALLINT cbCatalogName, - SQLWCHAR *szSchemaName, - SQLSMALLINT cbSchemaName, - SQLWCHAR *szTableName, - SQLSMALLINT cbTableName); -typedef SQLRETURN (SQL_API *SQLProcedureColumnsW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCatalogName, - SQLSMALLINT cbCatalogName, - SQLWCHAR *szSchemaName, - SQLSMALLINT cbSchemaName, - SQLWCHAR *szProcName, - SQLSMALLINT cbProcName, - SQLWCHAR *szColumnName, - SQLSMALLINT cbColumnName); -typedef SQLRETURN (SQL_API *SQLProceduresW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCatalogName, - SQLSMALLINT cbCatalogName, - SQLWCHAR *szSchemaName, - SQLSMALLINT cbSchemaName, - SQLWCHAR *szProcName, - SQLSMALLINT cbProcName); -typedef SQLRETURN (SQL_API *SQLPutData_t)( - SQLHSTMT StatementHandle, - SQLPOINTER Data, - SQLLEN StrLen_or_Ind); -typedef SQLRETURN (SQL_API *SQLRowCount_t)( - SQLHSTMT StatementHandle, - SQLLEN *RowCount); -typedef SQLRETURN (SQL_API *SQLSetConnectAttrW_t)( - SQLHDBC hdbc, - SQLINTEGER fAttribute, - SQLPOINTER rgbValue, - SQLINTEGER cbValue); -typedef SQLRETURN (SQL_API *SQLSetConnectOptionW_t)( - SQLHDBC hdbc, - SQLUSMALLINT fOption, - SQLULEN vParam); -typedef SQLRETURN (SQL_API *SQLSetCursorNameW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCursor, - SQLSMALLINT cbCursor); -typedef SQLRETURN (SQL_API *SQLSetDescFieldW_t)( - SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, - SQLSMALLINT FieldIdentifier, - SQLPOINTER Value, - SQLINTEGER BufferLength); -typedef SQLRETURN (SQL_API *SQLSetDescRec_t)( - SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, - SQLSMALLINT Type, - SQLSMALLINT SubType, - SQLLEN Length, - SQLSMALLINT Precision, - SQLSMALLINT Scale, - SQLPOINTER Data, - SQLLEN *StringLength, - SQLLEN *Indicator); -typedef SQLRETURN (SQL_API *SQLSetEnvAttr_t)(SQLHENV EnvironmentHandle, - SQLINTEGER Attribute, SQLPOINTER Value, - SQLINTEGER StringLength); -typedef SQLRETURN (SQL_API *SQLSetPos_t)( - SQLHSTMT hstmt, - SQLSETPOSIROW irow, - SQLUSMALLINT fOption, - SQLUSMALLINT fLock); -typedef SQLRETURN (SQL_API *SQLSetScrollOptions_t)( - SQLHSTMT hstmt, - SQLUSMALLINT fConcurrency, - SQLLEN crowKeyset, - SQLUSMALLINT crowRowset); -typedef SQLRETURN (SQL_API *SQLSetStmtAttrW_t)( - SQLHSTMT hstmt, - SQLINTEGER fAttribute, - SQLPOINTER rgbValue, - SQLINTEGER cbValueMax); -typedef SQLRETURN (SQL_API *SQLSpecialColumnsW_t)( - SQLHSTMT hstmt, - SQLUSMALLINT fColType, - SQLWCHAR *szCatalogName, - SQLSMALLINT cbCatalogName, - SQLWCHAR *szSchemaName, - SQLSMALLINT cbSchemaName, - SQLWCHAR *szTableName, - SQLSMALLINT cbTableName, - SQLUSMALLINT fScope, - SQLUSMALLINT fNullable); -typedef SQLRETURN (SQL_API *SQLStatisticsW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCatalogName, - SQLSMALLINT cbCatalogName, - SQLWCHAR *szSchemaName, - SQLSMALLINT cbSchemaName, - SQLWCHAR *szTableName, - SQLSMALLINT cbTableName, - SQLUSMALLINT fUnique, - SQLUSMALLINT fAccuracy); -typedef SQLRETURN (SQL_API *SQLTablePrivilegesW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCatalogName, - SQLSMALLINT cbCatalogName, - SQLWCHAR *szSchemaName, - SQLSMALLINT cbSchemaName, - SQLWCHAR *szTableName, - SQLSMALLINT cbTableName); -typedef SQLRETURN (SQL_API *SQLTablesW_t)( - SQLHSTMT hstmt, - SQLWCHAR *szCatalogName, - SQLSMALLINT cbCatalogName, - SQLWCHAR *szSchemaName, - SQLSMALLINT cbSchemaName, - SQLWCHAR *szTableName, - SQLSMALLINT cbTableName, - SQLWCHAR *szTableType, - SQLSMALLINT cbTableType); - -#ifdef SQLAPI_WINDOWS -typedef HANDLE (_stdcall *OpenSqlFilestream_t) ( - LPCWSTR FilestreamPath, - SQL_FILESTREAM_DESIRED_ACCESS DesiredAccess, - ULONG OpenOptions, - LPBYTE FilestreamTransactionContext, - SSIZE_T FilestreamTransactionContextLength, - PLARGE_INTEGER AllocationSize); -#endif - -class SQLAPI_API ssNCliAPI : public saAPI -{ -public: - ssNCliAPI(); - - SQLAllocHandle_t SQLAllocHandle; // 3.0 - SQLBindCol_t SQLBindCol; // 1.0 - SQLBindParameter_t SQLBindParameter; // 2.0 - SQLBulkOperations_t SQLBulkOperations; // 3.0 - SQLBrowseConnectW_t SQLBrowseConnectW; // 3.0 - SQLCancel_t SQLCancel; // 1.0 - SQLCloseCursor_t SQLCloseCursor; // 3.0 - SQLColAttributeW_t SQLColAttributeW; - SQLColumnPrivilegesW_t SQLColumnPrivilegesW; - SQLColumnsW_t SQLColumnsW; - SQLConnectW_t SQLConnectW; - SQLCopyDesc_t SQLCopyDesc; // 3.0 - SQLDescribeColW_t SQLDescribeColW; // 1.0 - SQLDescribeParam_t SQLDescribeParam; // 1.0 - SQLDisconnect_t SQLDisconnect; // 1.0 - SQLDriverConnectW_t SQLDriverConnectW; // 1.0 - SQLEndTran_t SQLEndTran; // 3.0 - SQLExecDirectW_t SQLExecDirectW; - SQLExecute_t SQLExecute; // 1.0 - SQLExtendedFetch_t SQLExtendedFetch; // 1.0 - SQLFetch_t SQLFetch; // 1.0 - SQLFetchScroll_t SQLFetchScroll; // 1.0 - SQLForeignKeysW_t SQLForeignKeysW; - SQLFreeHandle_t SQLFreeHandle; // 3.0 - SQLFreeStmt_t SQLFreeStmt; // 1.0 - SQLGetConnectAttrW_t SQLGetConnectAttrW; // 3.0 - SQLGetConnectOptionW_t SQLGetConnectOptionW; - SQLGetCursorNameW_t SQLGetCursorNameW; - SQLGetData_t SQLGetData; // 1.0 - SQLGetDescFieldW_t SQLGetDescFieldW; - SQLGetDescRecW_t SQLGetDescRecW; - SQLGetDiagFieldW_t SQLGetDiagFieldW; - SQLGetDiagRecW_t SQLGetDiagRecW; // 3.0 - SQLGetEnvAttr_t SQLGetEnvAttr; // 3.0 - SQLGetFunctions_t SQLGetFunctions; // 1.0 - SQLGetInfoW_t SQLGetInfoW; // 1.0 - SQLGetStmtAttrW_t SQLGetStmtAttrW; // 3.0 - SQLGetTypeInfoW_t SQLGetTypeInfoW; - SQLMoreResults_t SQLMoreResults; // 1.0 - SQLNativeSqlW_t SQLNativeSqlW; - SQLNumParams_t SQLNumParams; // 1.0 - SQLNumResultCols_t SQLNumResultCols; // 1.0 - SQLParamData_t SQLParamData; // 1.0 - SQLParamOptions_t SQLParamOptions; // 1.0 - SQLPrepareW_t SQLPrepareW; // 1.0 - SQLPrimaryKeysW_t SQLPrimaryKeysW; - SQLProcedureColumnsW_t SQLProcedureColumnsW;// 1.0 - SQLProceduresW_t SQLProceduresW; // 1.0 - SQLPutData_t SQLPutData; // 1.0 - SQLRowCount_t SQLRowCount; // 1.0 - SQLSetConnectAttrW_t SQLSetConnectAttrW; // 3.0 - SQLSetConnectOptionW_t SQLSetConnectOptionW;// 1.0 - SQLSetCursorNameW_t SQLSetCursorNameW; // 1.0 - SQLSetDescFieldW_t SQLSetDescFieldW; // 3.0 - SQLSetDescRec_t SQLSetDescRec; // 3.0 - SQLSetEnvAttr_t SQLSetEnvAttr; // 3.0 - SQLSetPos_t SQLSetPos; // 1.0 - SQLSetScrollOptions_t SQLSetScrollOptions;// 1.0 - SQLSetStmtAttrW_t SQLSetStmtAttrW; // 3.0 - SQLSpecialColumnsW_t SQLSpecialColumnsW; // 1.0 - SQLStatisticsW_t SQLStatisticsW; // 1.0 - SQLTablePrivilegesW_t SQLTablePrivilegesW;// 1.0 - SQLTablesW_t SQLTablesW; // 1.0 - -#ifdef SQLAPI_WINDOWS - OpenSqlFilestream_t OpenSqlFilestream; -#endif -}; - -class SQLAPI_API ssNCliConnectionHandles : public saConnectionHandles -{ -public: - ssNCliConnectionHandles(); - - SQLHENV m_hevn; - SQLHDBC m_hdbc; -}; - -class SQLAPI_API ssNCliCommandHandles : public saCommandHandles -{ -public: - ssNCliCommandHandles(); - - SQLHSTMT m_hstmt; -}; - -extern ssNCliAPI g_ssNCliAPI; - -#endif // !defined(__SSNCLIAPI_H__) +#endif + +// API header(s) +#include +#include +#ifdef SQLAPI_WINDOWS +#include +#else +#include +#endif + +extern void AddNCliSupport(const SAConnection *pCon); +extern void ReleaseNCliSupport(); + +typedef SQLRETURN (SQL_API *SQLAllocHandle_t)(SQLSMALLINT HandleType, + SQLHANDLE InputHandle, SQLHANDLE *OutputHandle); +typedef SQLRETURN (SQL_API *SQLBindCol_t)( + SQLHSTMT StatementHandle, + SQLUSMALLINT ColumnNumber, + SQLSMALLINT TargetType, + SQLPOINTER TargetValue, + SQLLEN BufferLength, + SQLLEN *StrLen_or_Ind); +typedef SQLRETURN (SQL_API *SQLBindParameter_t)( + SQLHSTMT hstmt, + SQLUSMALLINT ipar, + SQLSMALLINT fParamType, + SQLSMALLINT fCType, + SQLSMALLINT fSqlType, + SQLULEN cbColDef, + SQLSMALLINT ibScale, + SQLPOINTER rgbValue, + SQLLEN cbValueMax, + SQLLEN *pcbValue); +typedef SQLRETURN (SQL_API *SQLBulkOperations_t)( + SQLHSTMT StatementHandle, + SQLSMALLINT Operation); +typedef SQLRETURN (SQL_API *SQLBrowseConnectW_t)( + SQLHDBC hdbc, + SQLWCHAR *szConnStrIn, + SQLSMALLINT cbConnStrIn, + SQLWCHAR *szConnStrOut, + SQLSMALLINT cbConnStrOutMax, + SQLSMALLINT *pcbConnStrOut); +typedef SQLRETURN (SQL_API *SQLCancel_t)(SQLHSTMT StatementHandle); +typedef SQLRETURN (SQL_API *SQLCloseCursor_t)(SQLHSTMT StatementHandle); +#if defined(_WIN64) || defined(SA_64BIT) +typedef SQLRETURN (SQL_API *SQLColAttributeW_t)( + SQLHSTMT hstmt, + SQLUSMALLINT iCol, + SQLUSMALLINT iField, + SQLPOINTER pCharAttr, + SQLSMALLINT cbCharAttrMax, + SQLSMALLINT *pcbCharAttr, + SQLLEN *pNumAttr); +#else +typedef SQLRETURN (SQL_API *SQLColAttributeW_t)( + SQLHSTMT hstmt, + SQLUSMALLINT iCol, + SQLUSMALLINT iField, + SQLPOINTER pCharAttr, + SQLSMALLINT cbCharAttrMax, + SQLSMALLINT *pcbCharAttr, + SQLPOINTER pNumAttr); +#endif +typedef SQLRETURN (SQL_API *SQLColumnPrivilegesW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, + SQLWCHAR *szSchemaName, + SQLSMALLINT cbSchemaName, + SQLWCHAR *szTableName, + SQLSMALLINT cbTableName, + SQLWCHAR *szColumnName, + SQLSMALLINT cbColumnName); +typedef SQLRETURN (SQL_API *SQLColumnsW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, + SQLWCHAR *szSchemaName, + SQLSMALLINT cbSchemaName, + SQLWCHAR *szTableName, + SQLSMALLINT cbTableName, + SQLWCHAR *szColumnName, + SQLSMALLINT cbColumnName); +typedef SQLRETURN (SQL_API *SQLConnectW_t)( + SQLHDBC hdbc, + SQLWCHAR *szDSN, + SQLSMALLINT cbDSN, + SQLWCHAR *szUID, + SQLSMALLINT cbUID, + SQLWCHAR *szAuthStr, + SQLSMALLINT cbAuthStr); +typedef SQLRETURN (SQL_API *SQLCopyDesc_t)(SQLHDESC SourceDescHandle, + SQLHDESC TargetDescHandle); +typedef SQLRETURN (SQL_API *SQLDescribeColW_t)( + SQLHSTMT hstmt, + SQLUSMALLINT icol, + SQLWCHAR *szColName, + SQLSMALLINT cbColNameMax, + SQLSMALLINT *pcbColName, + SQLSMALLINT *pfSqlType, + SQLULEN *pcbColDef, + SQLSMALLINT *pibScale, + SQLSMALLINT *pfNullable); +typedef SQLRETURN (SQL_API *SQLDescribeParam_t)( + SQLHSTMT hstmt, + SQLUSMALLINT ipar, + SQLSMALLINT *pfSqlType, + SQLULEN *pcbParamDef, + SQLSMALLINT *pibScale, + SQLSMALLINT *pfNullable); +typedef SQLRETURN (SQL_API *SQLDisconnect_t)(SQLHDBC ConnectionHandle); +typedef SQLRETURN (SQL_API *SQLDriverConnectW_t)( + SQLHDBC hdbc, + SQLHWND hwnd, + SQLWCHAR *szConnStrIn, + SQLSMALLINT cbConnStrIn, + SQLWCHAR *szConnStrOut, + SQLSMALLINT cbConnStrOutMax, + SQLSMALLINT *pcbConnStrOut, + SQLUSMALLINT fDriverCompletion); +typedef SQLRETURN (SQL_API *SQLEndTran_t)(SQLSMALLINT HandleType, SQLHANDLE Handle, + SQLSMALLINT CompletionType); +typedef SQLRETURN (SQL_API *SQLExecDirectW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szSqlStr, + SQLINTEGER cbSqlStr); +typedef SQLRETURN (SQL_API *SQLExecute_t)(SQLHSTMT StatementHandle); +typedef SQLRETURN (SQL_API *SQLExtendedFetch_t)( + SQLHSTMT hstmt, + SQLUSMALLINT fFetchType, + SQLLEN irow, + SQLULEN *pcrow, + SQLUSMALLINT *rgfRowStatus); +typedef SQLRETURN (SQL_API *SQLFetch_t)(SQLHSTMT StatementHandle); +typedef SQLRETURN (SQL_API *SQLFetchScroll_t)( + SQLHSTMT StatementHandle, + SQLSMALLINT FetchOrientation, + SQLLEN FetchOffset); +typedef SQLRETURN (SQL_API *SQLFreeHandle_t)(SQLSMALLINT HandleType, SQLHANDLE Handle); +typedef SQLRETURN (SQL_API *SQLFreeStmt_t)(SQLHSTMT StatementHandle, + SQLUSMALLINT Option); +typedef SQLRETURN (SQL_API *SQLForeignKeysW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szPkCatalogName, + SQLSMALLINT cbPkCatalogName, + SQLWCHAR *szPkSchemaName, + SQLSMALLINT cbPkSchemaName, + SQLWCHAR *szPkTableName, + SQLSMALLINT cbPkTableName, + SQLWCHAR *szFkCatalogName, + SQLSMALLINT cbFkCatalogName, + SQLWCHAR *szFkSchemaName, + SQLSMALLINT cbFkSchemaName, + SQLWCHAR *szFkTableName, + SQLSMALLINT cbFkTableName); +typedef SQLRETURN (SQL_API *SQLGetConnectAttrW_t)( + SQLHDBC hdbc, + SQLINTEGER fAttribute, + SQLPOINTER rgbValue, + SQLINTEGER cbValueMax, + SQLINTEGER *pcbValue); +typedef SQLRETURN (SQL_API *SQLGetConnectOptionW_t)( + SQLHDBC hdbc, + SQLUSMALLINT fOption, + SQLPOINTER pvParam); +typedef SQLRETURN (SQL_API *SQLGetCursorNameW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCursor, + SQLSMALLINT cbCursorMax, + SQLSMALLINT *pcbCursor); +typedef SQLRETURN (SQL_API *SQLGetData_t)( + SQLHSTMT StatementHandle, + SQLUSMALLINT ColumnNumber, + SQLSMALLINT TargetType, + SQLPOINTER TargetValue, + SQLLEN BufferLength, + SQLLEN *StrLen_or_Ind); +typedef SQLRETURN (SQL_API *SQLGetDescFieldW_t)( + SQLHDESC hdesc, + SQLSMALLINT iRecord, + SQLSMALLINT iField, + SQLPOINTER rgbValue, + SQLINTEGER cbValueMax, + SQLINTEGER *pcbValue); +typedef SQLRETURN (SQL_API *SQLGetDescRecW_t)( + SQLHDESC hdesc, + SQLSMALLINT iRecord, + SQLWCHAR *szName, + SQLSMALLINT cbNameMax, + SQLSMALLINT *pcbName, + SQLSMALLINT *pfType, + SQLSMALLINT *pfSubType, + SQLLEN *pLength, + SQLSMALLINT *pPrecision, + SQLSMALLINT *pScale, + SQLSMALLINT *pNullable); +typedef SQLRETURN (SQL_API *SQLGetDiagFieldW_t)( + SQLSMALLINT fHandleType, + SQLHANDLE handle, + SQLSMALLINT iRecord, + SQLSMALLINT fDiagField, + SQLPOINTER rgbDiagInfo, + SQLSMALLINT cbDiagInfoMax, + SQLSMALLINT *pcbDiagInfo); +typedef SQLRETURN (SQL_API *SQLGetDiagRecW_t)( + SQLSMALLINT fHandleType, + SQLHANDLE handle, + SQLSMALLINT iRecord, + SQLWCHAR *szSqlState, + SQLINTEGER *pfNativeError, + SQLWCHAR *szErrorMsg, + SQLSMALLINT cbErrorMsgMax, + SQLSMALLINT *pcbErrorMsg); +typedef SQLRETURN (SQL_API *SQLGetEnvAttr_t)( + SQLHENV EnvironmentHandle, + SQLINTEGER Attribute, + SQLPOINTER Value, + SQLINTEGER BufferLength, + SQLINTEGER *StringLength); +typedef SQLRETURN (SQL_API *SQLGetFunctions_t)( + SQLHDBC ConnectionHandle, + SQLUSMALLINT FunctionId, + SQLUSMALLINT *Supported); +typedef SQLRETURN (SQL_API *SQLGetInfoW_t)( + SQLHDBC hdbc, + SQLUSMALLINT fInfoType, + SQLPOINTER rgbInfoValue, + SQLSMALLINT cbInfoValueMax, + SQLSMALLINT *pcbInfoValue); +typedef SQLRETURN (SQL_API *SQLGetTypeInfoW_t)( + SQLHSTMT StatementHandle, + SQLSMALLINT DataType); +typedef SQLRETURN (SQL_API *SQLGetStmtAttrW_t)( + SQLHSTMT hstmt, + SQLINTEGER fAttribute, + SQLPOINTER rgbValue, + SQLINTEGER cbValueMax, + SQLINTEGER *pcbValue); +typedef SQLRETURN (SQL_API *SQLMoreResults_t)( + SQLHSTMT hstmt); +typedef SQLRETURN (SQL_API *SQLNativeSqlW_t)( + SQLHDBC hdbc, + SQLWCHAR *szSqlStrIn, + SQLINTEGER cbSqlStrIn, + SQLWCHAR *szSqlStr, + SQLINTEGER cbSqlStrMax, + SQLINTEGER *pcbSqlStr); +typedef SQLRETURN (SQL_API *SQLNumParams_t)( + SQLHSTMT hstmt, + SQLSMALLINT *pcpar); +typedef SQLRETURN (SQL_API *SQLNumResultCols_t)( + SQLHSTMT StatementHandle, + SQLSMALLINT *ColumnCount); +typedef SQLRETURN (SQL_API *SQLParamData_t)( + SQLHSTMT StatementHandle, + SQLPOINTER *Value); +typedef SQLRETURN (SQL_API *SQLParamOptions_t)( + SQLHSTMT hstmt, + SQLULEN crow, + SQLULEN *pirow); +typedef SQLRETURN (SQL_API *SQLPrepareW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szSqlStr, + SQLINTEGER cbSqlStr); +typedef SQLRETURN (SQL_API *SQLPrimaryKeysW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, + SQLWCHAR *szSchemaName, + SQLSMALLINT cbSchemaName, + SQLWCHAR *szTableName, + SQLSMALLINT cbTableName); +typedef SQLRETURN (SQL_API *SQLProcedureColumnsW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, + SQLWCHAR *szSchemaName, + SQLSMALLINT cbSchemaName, + SQLWCHAR *szProcName, + SQLSMALLINT cbProcName, + SQLWCHAR *szColumnName, + SQLSMALLINT cbColumnName); +typedef SQLRETURN (SQL_API *SQLProceduresW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, + SQLWCHAR *szSchemaName, + SQLSMALLINT cbSchemaName, + SQLWCHAR *szProcName, + SQLSMALLINT cbProcName); +typedef SQLRETURN (SQL_API *SQLPutData_t)( + SQLHSTMT StatementHandle, + SQLPOINTER Data, + SQLLEN StrLen_or_Ind); +typedef SQLRETURN (SQL_API *SQLRowCount_t)( + SQLHSTMT StatementHandle, + SQLLEN *RowCount); +typedef SQLRETURN (SQL_API *SQLSetConnectAttrW_t)( + SQLHDBC hdbc, + SQLINTEGER fAttribute, + SQLPOINTER rgbValue, + SQLINTEGER cbValue); +typedef SQLRETURN (SQL_API *SQLSetConnectOptionW_t)( + SQLHDBC hdbc, + SQLUSMALLINT fOption, + SQLULEN vParam); +typedef SQLRETURN (SQL_API *SQLSetCursorNameW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCursor, + SQLSMALLINT cbCursor); +typedef SQLRETURN (SQL_API *SQLSetDescFieldW_t)( + SQLHDESC DescriptorHandle, + SQLSMALLINT RecNumber, + SQLSMALLINT FieldIdentifier, + SQLPOINTER Value, + SQLINTEGER BufferLength); +typedef SQLRETURN (SQL_API *SQLSetDescRec_t)( + SQLHDESC DescriptorHandle, + SQLSMALLINT RecNumber, + SQLSMALLINT Type, + SQLSMALLINT SubType, + SQLLEN Length, + SQLSMALLINT Precision, + SQLSMALLINT Scale, + SQLPOINTER Data, + SQLLEN *StringLength, + SQLLEN *Indicator); +typedef SQLRETURN (SQL_API *SQLSetEnvAttr_t)(SQLHENV EnvironmentHandle, + SQLINTEGER Attribute, SQLPOINTER Value, + SQLINTEGER StringLength); +typedef SQLRETURN (SQL_API *SQLSetPos_t)( + SQLHSTMT hstmt, + SQLSETPOSIROW irow, + SQLUSMALLINT fOption, + SQLUSMALLINT fLock); +typedef SQLRETURN (SQL_API *SQLSetScrollOptions_t)( + SQLHSTMT hstmt, + SQLUSMALLINT fConcurrency, + SQLLEN crowKeyset, + SQLUSMALLINT crowRowset); +typedef SQLRETURN (SQL_API *SQLSetStmtAttrW_t)( + SQLHSTMT hstmt, + SQLINTEGER fAttribute, + SQLPOINTER rgbValue, + SQLINTEGER cbValueMax); +typedef SQLRETURN (SQL_API *SQLSpecialColumnsW_t)( + SQLHSTMT hstmt, + SQLUSMALLINT fColType, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, + SQLWCHAR *szSchemaName, + SQLSMALLINT cbSchemaName, + SQLWCHAR *szTableName, + SQLSMALLINT cbTableName, + SQLUSMALLINT fScope, + SQLUSMALLINT fNullable); +typedef SQLRETURN (SQL_API *SQLStatisticsW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, + SQLWCHAR *szSchemaName, + SQLSMALLINT cbSchemaName, + SQLWCHAR *szTableName, + SQLSMALLINT cbTableName, + SQLUSMALLINT fUnique, + SQLUSMALLINT fAccuracy); +typedef SQLRETURN (SQL_API *SQLTablePrivilegesW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, + SQLWCHAR *szSchemaName, + SQLSMALLINT cbSchemaName, + SQLWCHAR *szTableName, + SQLSMALLINT cbTableName); +typedef SQLRETURN (SQL_API *SQLTablesW_t)( + SQLHSTMT hstmt, + SQLWCHAR *szCatalogName, + SQLSMALLINT cbCatalogName, + SQLWCHAR *szSchemaName, + SQLSMALLINT cbSchemaName, + SQLWCHAR *szTableName, + SQLSMALLINT cbTableName, + SQLWCHAR *szTableType, + SQLSMALLINT cbTableType); + +#ifdef SQLAPI_WINDOWS +typedef HANDLE (_stdcall *OpenSqlFilestream_t) ( + LPCWSTR FilestreamPath, + SQL_FILESTREAM_DESIRED_ACCESS DesiredAccess, + ULONG OpenOptions, + LPBYTE FilestreamTransactionContext, + SSIZE_T FilestreamTransactionContextLength, + PLARGE_INTEGER AllocationSize); +#endif + +class SQLAPI_API ssNCliAPI : public saAPI +{ +public: + ssNCliAPI(); + + bool osDriver; + + SQLAllocHandle_t SQLAllocHandle; // 3.0 + SQLBindCol_t SQLBindCol; // 1.0 + SQLBindParameter_t SQLBindParameter; // 2.0 + SQLBulkOperations_t SQLBulkOperations; // 3.0 + SQLBrowseConnectW_t SQLBrowseConnectW; // 3.0 + SQLCancel_t SQLCancel; // 1.0 + SQLCloseCursor_t SQLCloseCursor; // 3.0 + SQLColAttributeW_t SQLColAttributeW; + SQLColumnPrivilegesW_t SQLColumnPrivilegesW; + SQLColumnsW_t SQLColumnsW; + SQLConnectW_t SQLConnectW; + SQLCopyDesc_t SQLCopyDesc; // 3.0 + SQLDescribeColW_t SQLDescribeColW; // 1.0 + SQLDescribeParam_t SQLDescribeParam; // 1.0 + SQLDisconnect_t SQLDisconnect; // 1.0 + SQLDriverConnectW_t SQLDriverConnectW; // 1.0 + SQLEndTran_t SQLEndTran; // 3.0 + SQLExecDirectW_t SQLExecDirectW; + SQLExecute_t SQLExecute; // 1.0 + SQLExtendedFetch_t SQLExtendedFetch; // 1.0 + SQLFetch_t SQLFetch; // 1.0 + SQLFetchScroll_t SQLFetchScroll; // 1.0 + SQLForeignKeysW_t SQLForeignKeysW; + SQLFreeHandle_t SQLFreeHandle; // 3.0 + SQLFreeStmt_t SQLFreeStmt; // 1.0 + SQLGetConnectAttrW_t SQLGetConnectAttrW; // 3.0 + SQLGetConnectOptionW_t SQLGetConnectOptionW; + SQLGetCursorNameW_t SQLGetCursorNameW; + SQLGetData_t SQLGetData; // 1.0 + SQLGetDescFieldW_t SQLGetDescFieldW; + SQLGetDescRecW_t SQLGetDescRecW; + SQLGetDiagFieldW_t SQLGetDiagFieldW; + SQLGetDiagRecW_t SQLGetDiagRecW; // 3.0 + SQLGetEnvAttr_t SQLGetEnvAttr; // 3.0 + SQLGetFunctions_t SQLGetFunctions; // 1.0 + SQLGetInfoW_t SQLGetInfoW; // 1.0 + SQLGetStmtAttrW_t SQLGetStmtAttrW; // 3.0 + SQLGetTypeInfoW_t SQLGetTypeInfoW; + SQLMoreResults_t SQLMoreResults; // 1.0 + SQLNativeSqlW_t SQLNativeSqlW; + SQLNumParams_t SQLNumParams; // 1.0 + SQLNumResultCols_t SQLNumResultCols; // 1.0 + SQLParamData_t SQLParamData; // 1.0 + SQLParamOptions_t SQLParamOptions; // 1.0 + SQLPrepareW_t SQLPrepareW; // 1.0 + SQLPrimaryKeysW_t SQLPrimaryKeysW; + SQLProcedureColumnsW_t SQLProcedureColumnsW;// 1.0 + SQLProceduresW_t SQLProceduresW; // 1.0 + SQLPutData_t SQLPutData; // 1.0 + SQLRowCount_t SQLRowCount; // 1.0 + SQLSetConnectAttrW_t SQLSetConnectAttrW; // 3.0 + SQLSetConnectOptionW_t SQLSetConnectOptionW;// 1.0 + SQLSetCursorNameW_t SQLSetCursorNameW; // 1.0 + SQLSetDescFieldW_t SQLSetDescFieldW; // 3.0 + SQLSetDescRec_t SQLSetDescRec; // 3.0 + SQLSetEnvAttr_t SQLSetEnvAttr; // 3.0 + SQLSetPos_t SQLSetPos; // 1.0 + SQLSetScrollOptions_t SQLSetScrollOptions;// 1.0 + SQLSetStmtAttrW_t SQLSetStmtAttrW; // 3.0 + SQLSpecialColumnsW_t SQLSpecialColumnsW; // 1.0 + SQLStatisticsW_t SQLStatisticsW; // 1.0 + SQLTablePrivilegesW_t SQLTablePrivilegesW;// 1.0 + SQLTablesW_t SQLTablesW; // 1.0 + +#ifdef SQLAPI_WINDOWS + OpenSqlFilestream_t OpenSqlFilestream; +#endif +}; + +class SQLAPI_API ssNCliConnectionHandles : public saConnectionHandles +{ +public: + ssNCliConnectionHandles(); + + SQLHENV m_hevn; + SQLHDBC m_hdbc; +}; + +class SQLAPI_API ssNCliCommandHandles : public saCommandHandles +{ +public: + ssNCliCommandHandles(); + + SQLHSTMT m_hstmt; +}; + +extern ssNCliAPI g_ssNCliAPI; + +#endif // !defined(__SSNCLIAPI_H__) diff --git a/libraries/SQLAPI/include/ssOleDbAPI.h b/libraries/SQLAPI/include/ssOleDbAPI.h index a925e00a5..52f82f8e7 100644 --- a/libraries/SQLAPI/include/ssOleDbAPI.h +++ b/libraries/SQLAPI/include/ssOleDbAPI.h @@ -18,6 +18,8 @@ class ssOleDbAPI : public saAPI { public: ssOleDbAPI(); + + static bool& ssOleDbAPI::ProcessSQLServerErrorInfo(); }; class SQLAPI_API ssOleDbConnectionHandles : public saConnectionHandles diff --git a/libraries/SQLAPI/include/sybAPI.h b/libraries/SQLAPI/include/sybAPI.h index a6863ce3f..aee356093 100644 --- a/libraries/SQLAPI/include/sybAPI.h +++ b/libraries/SQLAPI/include/sybAPI.h @@ -17,6 +17,7 @@ class SQLAPI_API SASybErrInfo : public SAMutex { public: SASybErrInfo(); + virtual ~SASybErrInfo(); public: CS_MSGNUM msgnumber; diff --git a/src/ba/ba3700.cpp b/src/ba/ba3700.cpp index b7e5aca5e..96f04f49f 100755 --- a/src/ba/ba3700.cpp +++ b/src/ba/ba3700.cpp @@ -52,7 +52,8 @@ protected: static bool mese_commerciale (TMask_field& f, KEY k); static bool fixed_scad (TMask_field& f, KEY k); static bool tipo_rata (TMask_field& f, KEY k); - static bool ult_class (TMask_field& f, KEY k); + static bool ult_class (TMask_field& f, KEY k); + static bool cond_pagamento (TMask_field& f, KEY k); void* _app_data; @@ -93,7 +94,8 @@ bool TCond_pag_app::user_create() _msk->set_handler (F_FIXSCAD_2 , fixed_scad); _msk->set_handler (F_FIXSCAD_3 , fixed_scad); _msk->set_handler (F_TIPO_RATA , tipo_rata); - _msk->set_handler (F_ULT_CLASS , ult_class); + _msk->set_handler (F_ULT_CLASS , ult_class); + _msk->set_handler(F_CONDPAGSDI , cond_pagamento); shuttle._msk = _msk; shuttle._sht = _cs; @@ -264,7 +266,10 @@ bool TCond_pag_app::numero_rate(TMask_field& f, KEY k) } msk->set(F_NUM_RATE,pag->n_rate()); - return TRUE; + + // Finito tutto chiamo il controllo sul tipo pagamento! + + return cond_pagamento(f.mask().field(F_CONDPAGSDI), K_TAB); } bool TCond_pag_app::mese_commerciale(TMask_field& f, KEY k) @@ -375,6 +380,44 @@ bool TCond_pag_app::ult_class(TMask_field& f, KEY k) return TRUE; } +bool TCond_pag_app::cond_pagamento(TMask_field& f, KEY k) +{ + if (!f.to_check(k) || f.mask().query_mode() || !f.mask().get(F_NUM_RATE).full()) + return true; + // Controllo se il tipo è coerente con quello segnato prima + int nrate = f.mask().get_int(F_NUM_RATE); + bool err = false; + switch (atoi(f.get().right(1))) + { + // Pagamento a rate + case 1: + if (nrate <= 1) + { + err = true; + f.set("TP02"); + } + break; + // Pagamento completo + case 2: + if (nrate > 1) + { + err = true; + f.set("TP01"); + } + break; + // Pagamento anticipo + case 3: + // Non so che fare! + break; + } + + if(err) + { + warning_box("Impossibile impostare questo tipo di pagamento con %d rate!", nrate); + } + return true; +} + // qui viene il belloccio bool TCond_pag_app::sheet_action(TSheet_field&, int r, KEY k) { diff --git a/src/ba/ba3700.h b/src/ba/ba3700.h index 12ca2c31d..3be6a393a 100755 --- a/src/ba/ba3700.h +++ b/src/ba/ba3700.h @@ -3,20 +3,21 @@ #define TAB_CPG "%CPG" #define TAB_RPG "%RPG" -#define F_CODICE 201 -#define F_DESC 202 -#define F_SHEET_RPG 203 -#define F_INIZIOSCAD 204 -#define F_MESECOMM 205 -#define F_TIPO_PRIMA_RATA 206 -#define F_RATE_DIFF 208 -#define F_INT_RATE 209 -#define F_NUM_RATE 210 -#define F_TIPO_RATA 211 -#define F_EQUAL_FROM 212 -#define F_START_RATA 213 -#define F_ULT_CLASS 214 -#define F_FIXSCAD_1 215 -#define F_FIXSCAD_2 216 -#define F_FIXSCAD_3 217 +#define F_CODICE 201 +#define F_CONDPAGSDI 202 +#define F_DESC 203 +#define F_SHEET_RPG 204 +#define F_INIZIOSCAD 205 +#define F_MESECOMM 206 +#define F_TIPO_PRIMA_RATA 207 +#define F_RATE_DIFF 208 +#define F_INT_RATE 209 +#define F_NUM_RATE 210 +#define F_TIPO_RATA 211 +#define F_EQUAL_FROM 212 +#define F_START_RATA 213 +#define F_ULT_CLASS 214 +#define F_FIXSCAD_1 215 +#define F_FIXSCAD_2 216 +#define F_FIXSCAD_3 217 diff --git a/src/ba/ba3700a.uml b/src/ba/ba3700a.uml index 5339b2056..f9a33e49f 100755 --- a/src/ba/ba3700a.uml +++ b/src/ba/ba3700a.uml @@ -36,6 +36,15 @@ BEGIN KEY 1 END +LIST F_CONDPAGSDI 4 20 +BEGIN + PROMPT 20 1 "Tipo di pagamento " + FIELD S12 + ITEM "TP01|TP01 A rate" + ITEM "TP02|TP02 Completo" + ITEM "TP03|TP03 Anticipo" +END + STRING F_DESC 50 BEGIN PROMPT 2 2 "Descrizione " diff --git a/src/ba/batbclr.h b/src/ba/batbclr.h index 782ee131f..fa8520101 100755 --- a/src/ba/batbclr.h +++ b/src/ba/batbclr.h @@ -1,3 +1,4 @@ -#define F_CODICERATA 101 -#define F_CODICEALFA 102 -#define F_DESCR 103 +#define F_CODICERATA 101 +#define F_CODICEALFA 102 +#define F_MODPAG 103 +#define F_DESCR 104 diff --git a/src/ba/batbclr.uml b/src/ba/batbclr.uml index 4f075d710..bc150adf0 100755 --- a/src/ba/batbclr.uml +++ b/src/ba/batbclr.uml @@ -50,6 +50,38 @@ BEGIN CHECKTYPE REQUIRED END +STRING F_MODPAG 4 +BEGIN + PROMPT 20 4 "Tipo pagamento " + SHEET "Codice|Tipo pagamento@32" + INPUT S_MODPAG + OUTPUT S_MODPAG + CHECKTYPE REQUIRED + FIELD S12 + ITEM "MP01|contanti" + ITEM "MP02|assegno" + ITEM "MP03|assegno circolare" + ITEM "MP04|contanti presso Tesoreria" + ITEM "MP05|bonifico" + ITEM "MP06|vaglia cambiario" + ITEM "MP07|bollettino bancario" + ITEM "MP08|carta di pagamento" + ITEM "MP09|RID" + ITEM "MP10|RID utenze" + ITEM "MP11|RID veloce" + ITEM "MP12|RIBA" + ITEM "MP13|MAV" + ITEM "MP14|quietanza erario" + ITEM "MP15|giroconto su conti di contabilità speciale" + ITEM "MP16|domiciliazione bancaria" + ITEM "MP17|domiciliazione postale" + ITEM "MP18|bollettino di c/c postale" + ITEM "MP19|SEPA Direct Debit" + ITEM "MP20|SEPA Direct Debit CORE" + ITEM "MP21|SEPA Direct Debit B2B" + ITEM "MP22|Trattenuta su somme già riscosse" +END + STRING F_DESCR 50 BEGIN PROMPT 2 6 "Descrizione " diff --git a/src/cg/cg0200.cpp b/src/cg/cg0200.cpp index 443889809..d77b825c3 100755 --- a/src/cg/cg0200.cpp +++ b/src/cg/cg0200.cpp @@ -85,6 +85,8 @@ protected: static bool rfso_handler(TMask_field& f, KEY k); // Handler Stato static bool stato_handler(TMask_field& f, KEY k); + // Handler codice destinatario per Fatturazione PA/FP + static bool coddest_handler(TMask_field& f, KEY k); public: virtual bool get_next_key(TToken_string& key); @@ -575,6 +577,18 @@ bool TClifo_application::stato_handler(TMask_field& f, KEY k) return true; } +bool TClifo_application::coddest_handler(TMask_field& f, KEY k) +{ + // Controllo che il codice immesso sia di 6/7 cifre in base al clifo + if(f.focusdirty() && !f.empty() && + ((f.mask().get_int(F_ALLEG) == 7 && f.get().size() != 6) || // P.A. + (f.mask().get_int(F_ALLEG) != 7 && f.get().size() != 7))) // Privato + { + warning_box("Lunghezza codice destinatario incoerente"); + } + return true; +} + HIDDEN bool alleg_handler(TMask_field& f, KEY key) { if (f.to_check(key, true)) @@ -1561,6 +1575,7 @@ bool TClifo_application::user_create() // initvar e arrmask _msk->set_handler(DLG_CONTRLAV, contrlav_handler); _msk->set_handler(LST_TIPO_RFSO, rfso_handler); _msk->set_handler(F_STATOCF, stato_handler); + _msk->set_handler(F_PADESTIN, coddest_handler); TSheet_field& ind = _msk->sfield(F_SHEET_G_VEN); ind.set_notify(indsp_notify); diff --git a/src/cg/cg0200.h b/src/cg/cg0200.h index 5a13fa08f..27305d689 100755 --- a/src/cg/cg0200.h +++ b/src/cg/cg0200.h @@ -176,6 +176,7 @@ #define DLG_OGGETTI 304 #define F_BYMAIL 306 #define F_DOCMAIL 307 +#define F_PEC 324 #define DLG_ANAG 308 #define DLG_CONTRLAV 309 #define F_BANA 310 diff --git a/src/cg/cg0200a.uml b/src/cg/cg0200a.uml index bcc454454..18fe9f65d 100755 --- a/src/cg/cg0200a.uml +++ b/src/cg/cg0200a.uml @@ -519,7 +519,7 @@ END GROUPBOX DLG_NULL 76 10 BEGIN - PROMPT 1 4 "Numeri telefonici" + PROMPT 1 4 "Contatti" END STRING F_PTEL 5 @@ -590,33 +590,39 @@ BEGIN HELP "Numero telefonico del fax" END -STRING F_MAIL 50 48 -BEGIN - PROMPT 2 8 "E-mail " - FIELD MAIL -END - -BUTTON DLG_EMAIL 10 2 -BEGIN - PROMPT 62 8 "~Posta" - PICTURE BMP_EMAIL -END - BOOLEAN F_BYMAIL BEGIN - PROMPT 2 9 "Consenso spedizione documenti per posta elettronica" + PROMPT 40 7 "Consenso spedizione doc tramite email" FIELD BYMAIL MESSAGE FALSE CLEAR,F_DOCMAIL MESSAGE TRUE ENABLE,F_DOCMAIL END -STRING F_DOCMAIL 50 +STRING F_MAIL 50 23 BEGIN - PROMPT 2 10 "Indirizzo doc." + PROMPT 2 8 "E-Mail " + FIELD MAIL +END + +STRING F_DOCMAIL 50 20 +BEGIN + PROMPT 40 8 "E-Mail doc" FIELD DOCMAIL CHECKTYPE REQUIRED END +STRING F_PEC 50 23 +BEGIN + PROMPT 2 9 "Pec " + FIELD PEC +END + +BUTTON DLG_EMAIL 10 2 +BEGIN + PROMPT 62 9 "~Posta" + PICTURE BMP_EMAIL +END + BOOLEAN F_SPEDPRI BEGIN PROMPT 2 11 "Informativa Privacy spedita" diff --git a/src/cg/cgpagame.cpp b/src/cg/cgpagame.cpp index dc8fa435f..4c8686305 100755 --- a/src/cg/cgpagame.cpp +++ b/src/cg/cgpagame.cpp @@ -1495,6 +1495,7 @@ bool TPagamento::read(TTable* t, TTable* r) _fixd[1] = t->get_int("I1"); _fixd[2] = t->get_int("I2"); _int_rate = t->get_int("I3"); + _cond_pag = t->get("S12"); // aggiusta _inizio secondo INSCAD; vedi mese commerciale etc. if (_inscad == 'M') diff --git a/src/cg/cgpagame.h b/src/cg/cgpagame.h index c1a8407ed..1576162eb 100755 --- a/src/cg/cgpagame.h +++ b/src/cg/cgpagame.h @@ -65,7 +65,8 @@ class TPagamento : public TObject int _fixd[3]; // giorni scadenza fissa, se desiderati int _roundlit; // decimali arrotondamento importo in lire (sempre 0 per ora) int _roundval; // decimali arrotondamento importo in valuta - int _int_rate; + int _int_rate; + TString _cond_pag; // Condizione di pagamento per SDI, valori ammessi: TP01/02/03 int _rata_ifield(int n, int f) const; long _rata_lfield(int n, int f) const; @@ -148,6 +149,7 @@ public: const TString& code() const { return _code; } const char* desc_tpr() const; const char* desc_tipo(int tipo, char ulc, bool* ok = NULL) const; + const TString& cond_pag_sdi() const { return _cond_pag; } // giorni scadenza fissi, aggiunti poi void set_fixed_scad(int a, int ind) { _fixd[ind] = a; } diff --git a/src/cg/f17.dir b/src/cg/f17.dir index 4fe4f4254..2c435bf72 100755 --- a/src/cg/f17.dir +++ b/src/cg/f17.dir @@ -1,3 +1,3 @@ 17 0 -$cfven|4604|4604|510|0|Clienti/Fornitori per vendite||| +$cfven|4612|4613|511|0|Clienti/Fornitori per vendite||| diff --git a/src/cg/f17.trr b/src/cg/f17.trr index 7df564c69..1ae9d2987 100755 --- a/src/cg/f17.trr +++ b/src/cg/f17.trr @@ -79,7 +79,7 @@ CODCAUSNC|1|3|0|Causale Contabile per le Note di Credito CODCAUSINC|1|3|0|Causale Contabile per gli Incassi RIFDOC|8|1|0|Riferimenti sui documenti IMPMINFAT|4|18|3|Importo minimo Fatture -PADESTIN|1|6|0|Codice ufficio amministrazione +PADESTIN|1|7|0|Codice ufficio amministrazione PARIFAMM|1|20|0|Codice riferimento amministrativo PRODCONAI|1|6|0|Produttore CONAI[6]: acc,all,car,pla,leg,vet 1 diff --git a/src/cg/f20.dir b/src/cg/f20.dir index 0cf9807df..a6f8bd30d 100755 --- a/src/cg/f20.dir +++ b/src/cg/f20.dir @@ -1,3 +1,3 @@ 20 0 -$clifo|0|0|825|0|Clienti/Fornitori||| +$clifo|774|774|875|0|Clienti/Fornitori||| diff --git a/src/cg/f20.trr b/src/cg/f20.trr index ab0ec9931..4b9c2a166 100755 --- a/src/cg/f20.trr +++ b/src/cg/f20.trr @@ -1,5 +1,5 @@ 20 -67 +68 TIPOCF|1|1|0|Tipo liente ornitore CODCF|3|6|0|Codice RAGSOC|1|50|0|Ragione sociale @@ -34,6 +34,7 @@ PTELEX|1|10|0|Prefisso del numero di TELEX TELEX|1|30|0|Prefisso del numero di TELEX MAIL|1|50|0|Indirizzo di posta elettronica generico BYMAIL|8|1|0|Consenso all' invio dei documenti per posta elettronica +PEC|1|50|0|Indirizzo di posta elettronica certificato DOCMAIL|1|50|0|Indirizzo di posta elettronica per i documenti DATANASC|5|8|0|Data di nascita STATONASC|2|3|0|Codice stato di nascita diff --git a/src/fp/Rappresentazione_tabellare_del_tracciato_FatturaPA_versione_1.2.1.xls b/src/fp/Rappresentazione_tabellare_del_tracciato_FatturaPA_versione_1.2.1.xls new file mode 100644 index 000000000..94d225528 Binary files /dev/null and b/src/fp/Rappresentazione_tabellare_del_tracciato_FatturaPA_versione_1.2.1.xls differ diff --git a/src/fp/fp0.cpp b/src/fp/fp0.cpp new file mode 100644 index 000000000..dace2a5c1 --- /dev/null +++ b/src/fp/fp0.cpp @@ -0,0 +1,17 @@ +#include +#include "fp0.h" + +int main(int argc, char** argv) +{ + int rt = -1; + const int r = (argc > 1) ? atoi( &argv[1][1] ) : 1; + + switch (r) + { + case 2: rt = fp0300(argc, argv); break; // Gestione fatture attive (PAA, Ex Fattura PA) + //case 1: rt = fp0200(argc, argv); break; // Gestione fatture passive (PAF) + default: rt = fp0100(argc, argv); break; // Configurazione + } + return rt; +} + diff --git a/src/fp/fp0.h b/src/fp/fp0.h new file mode 100644 index 000000000..84e1d0d7e --- /dev/null +++ b/src/fp/fp0.h @@ -0,0 +1,8 @@ +#ifndef __TF0_H +#define __TF0_H + +int fp0100(int argc, char* argv[]); +int fp0200(int argc, char* argv[]); +int fp0300(int argc, char* argv[]); + +#endif diff --git a/src/fp/fp0100.cpp b/src/fp/fp0100.cpp new file mode 100644 index 000000000..3c2820c37 --- /dev/null +++ b/src/fp/fp0100.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include + +#include "fp0.h" +#include "fp0100a.h" +#include +#include "recset.h" +#include "progind.h" +#include "../ve/velib.h" + +class TParametri_mask : public TAutomask +{ +protected: + void tipi_import(); + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + +public: + TParametri_mask(const char* n); +}; + +TParametri_mask::TParametri_mask(const char * n) : TAutomask(n) +{ + set(F_INDIRIZZO, ini_get_string(CONFIG_DITTA, "fp", "ip")); + set(F_DATABASE, ini_get_string(CONFIG_DITTA, "fp", "db")); + set(F_USER, ini_get_string(CONFIG_DITTA, "fp", "usr")); + set(F_PASSWORD, decode(ini_get_string(CONFIG_DITTA, "fp", "psw") )); + set(F_FLDDEST, ini_get_string(CONFIG_DITTA, "fp", "flddest")); + set(F_FLDUSRDEST, ini_get_string(CONFIG_DITTA, "fp", "fldusrdest")); + +} + +void TParametri_mask::tipi_import() +{ + if(yesno_box("Attenzione! Questa procedura riporterà su tutti i documenti il tipo documento SDI della configurazione!\nEventuali modifiche già fatte verranno sovrascritte, continuare?")) + { + TISAM_recordset tipi("USE %TIP SELECT S12!=''"); + TProgress_monitor p(tipi.items(), "Elaborazione tipi doc"); + for(bool ok = tipi.move_first(); ok; ok = tipi.move_next()) + { + if (!p.add_status()) + break; + + TISAM_recordset docs("USE DOC SELECT TIPODOC==#TIPODOC"); + docs.set_var("#TIPODOC", tipi.get("CODTAB")); + + TString msg = "Elaborazione documenti "; msg << tipi.get("CODTAB"); + TProgress_monitor d(docs.items(), msg); + for (bool ok = docs.move_first(); ok; ok = docs.move_next()) + { + if (!d.add_status()) + break; + TDocumento doc(docs.cursor()->curr()); + doc.put("TIPODOCSDI", tipi.get("S12").as_string()); + if (doc.rewrite() != NOERR) + fatal_box("ERRORE aggiornamento documenti"); + } + } + } +} + +bool TParametri_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_ELABORA: + if (e == fe_button) + tipi_import(); + default: + break; + } + + return true; +} + +class TParametri_ditta : public TSkeleton_application +{ +public: + virtual bool create(); + virtual void main_loop(); +}; + +bool TParametri_ditta::create() +{ + open_files(LF_DOC, LF_RIGHEDOC, -1); + return TSkeleton_application::create(); +} + +void TParametri_ditta::main_loop() +{ + TParametri_mask pm("fp0100a"); + while (pm.run() == K_ENTER) + { + // Testo prima la connessione + TString + ip = pm.get(F_INDIRIZZO), + db = pm.get(F_DATABASE), + ad, + usr = pm.get(F_USER), + psw = pm.get(F_PASSWORD); + ad << ip << "@" << db; + + SSimple_query s(ad, usr, psw, TSDB_MSSQL); + if (s.sq_is_connect()) + { + + ini_set_string(CONFIG_DITTA, "fp", "ip", ip); + ini_set_string(CONFIG_DITTA, "fp", "db", db); + ini_set_string(CONFIG_DITTA, "fp", "usr", usr); + ini_set_string(CONFIG_DITTA, "fp", "psw", encode(psw)); + ini_set_string(CONFIG_DITTA, "fp", "flddest", pm.get(F_FLDDEST)); + ini_set_string(CONFIG_DITTA, "fp", "fldusrdest", pm.get(F_FLDUSRDEST)); + message_box("Dati salvati correttamente!"); + } + else + error_box("Connessione a database non riuscita!"); + } +} + +int fp0100(int argc, char* argv[]) +{ + TParametri_ditta appc; + appc.run(argc, argv, TR("Configurazione FP")); + return 0; +} \ No newline at end of file diff --git a/src/fp/fp0100a.h b/src/fp/fp0100a.h new file mode 100644 index 000000000..7553970f2 --- /dev/null +++ b/src/fp/fp0100a.h @@ -0,0 +1,6 @@ +#define F_INDIRIZZO 104 +#define F_DATABASE 101 +#define F_USER 102 +#define F_PASSWORD 103 +#define F_FLDDEST 104 +#define F_FLDUSRDEST 105 \ No newline at end of file diff --git a/src/fp/fp0100a.uml b/src/fp/fp0100a.uml new file mode 100644 index 000000000..e2dbcc807 --- /dev/null +++ b/src/fp/fp0100a.uml @@ -0,0 +1,64 @@ +#include "fp0100a.h" + +TOOLBAR "topbar" 0 0 0 2 +#include + +BUTTON DLG_ELABORA 2 2 +BEGIN + PROMPT 1 1 "Imp. Tipi Doc" + PICTURE TOOL_ELABORA +END +ENDPAGE + +PAGE "Configurazione FP" 0 2 0 0 + +GROUPBOX DLG_NULL 78 6 +BEGIN + PROMPT 1 1 "@BDatabase" +END + +STRING F_INDIRIZZO 50 +BEGIN + PROMPT 2 2 "Indirizzo " + FLAGS "" + CHECKTYPE REQUIRED +END + + +STRING F_DATABASE 15 +BEGIN + PROMPT 2 3 "Nome " + FLAGS "" + CHECKTYPE REQUIRED +END + +STRING F_USER 15 +BEGIN + PROMPT 2 4 "Utente " + FLAGS "" + CHECKTYPE REQUIRED +END + +STRING F_PASSWORD 15 +BEGIN + PROMPT 2 5 "Password " + FLAGS "*" + CHECKTYPE REQUIRED +END + +STRING F_FLDDEST 50 +BEGIN + PROMPT 2 6 "Destinazione Server " + FLAGS "" + CHECKTYPE REQUIRED +END + +STRING F_FLDUSRDEST 50 +BEGIN + PROMPT 2 7 "Destinazione User " + FLAGS "" +END + +ENDPAGE + +ENDMASK \ No newline at end of file diff --git a/src/fp/fp0200.cpp b/src/fp/fp0200.cpp new file mode 100644 index 000000000..73c5add88 --- /dev/null +++ b/src/fp/fp0200.cpp @@ -0,0 +1,1757 @@ +#include "fp0.h" +#include "fp0200b.h" + +#include +#include +#include +#include + +#include "../ve/velib05.h" +#include "../cg/cglib03.h" + +#include "../fe/felib.h" + +#include +#include +#include +#include +#include +#include +#include "../cg/cfban.h" + +///////////////////////////////////////////////////////////////////////////////////// +// Utilities +///////////////////////////////////////////////////////////////////////////////////// + +SSimple_query& db() +{ + static SSimple_query* db = new SSimple_query(); + return *db; +} + +// Crea la coppia di chiavi per il db PAF a partire da un documento vero e proprio +static bool chiave_paf(const TDocumento& doc, TString& cess, TString& numdoc) +{ + cess = doc.clifor().vendite().get(CFV_PADESTIN); + CHECK(cess.full(), "Destinatario fattura P.A. non valido"); + + const TCodice_numerazione& codnum = doc.codice_numerazione(); + const long ndoc = doc.numero(); + TString16 fullnumdoc; codnum.complete_num(ndoc, fullnumdoc); + + numdoc.cut(0) << doc.get(DOC_ANNO) << '/' << codnum.codice() << '/' << fullnumdoc; + return cess.full(); +} + +// Crea la coppia di chiavi per il db PAF a partire da un semplice record di testata documento +static bool chiave_paf(const TRectype& doc, TString& cess, TString& numdoc) +{ + const long codcf = doc.get_long(DOC_CODCF); + TString8 key; key.format("C|%ld", codcf); + cess = cache().get(LF_CFVEN, key, CFV_PADESTIN); + CHECK(cess.full(), "Destinatario fattura P.A. non valido"); + + const TCodice_numerazione& codnum = cached_numerazione(doc.get(DOC_CODNUM)); + const long ndoc = doc.get_long(DOC_NDOC); + TString16 fullnumdoc; codnum.complete_num(ndoc, fullnumdoc); + numdoc.cut(0) << doc.get(DOC_ANNO) << '/' << codnum.codice() << '/' << fullnumdoc; + + return cess.full(); +} + + +///////////////////////////////////////////////////////////////////////////////////// +// TAncestor +///////////////////////////////////////////////////////////////////////////////////// + +struct TAncestor : public TObject +{ + TString20 _numdoc; + TDate _datadoc; + + TAncestor(const TRectype& rdoc); +}; + +TAncestor::TAncestor(const TRectype& rdoc) +{ + const int anno = rdoc.get_int(RDOC_ANNO); + const TString4 codnum = rdoc.get(RDOC_CODNUM); + const long ndoc = rdoc.get_long(RDOC_NDOC); + const TCodice_numerazione& num = cached_numerazione(codnum); + + TToken_string kdoc; + kdoc = rdoc.get(RDOC_PROVV); + kdoc.add(anno); + kdoc.add(codnum); + kdoc.add(ndoc); + const TRectype& doc = cache().get(LF_DOC, kdoc); + + TString16 numdoc; num.complete_num(ndoc, numdoc); + _numdoc.format("%d/%s/%s", anno, (const char*)codnum, (const char*)numdoc); + _datadoc = doc.get_date(DOC_DATADOC); +} + + +///////////////////////////////////////////////////////////////////////////////////// +// TPaf_record +///////////////////////////////////////////////////////////////////////////////////// + +// Contenitore di campi di un record di database SQLite +class TPaf_record : public TObject +{ + TString8 _table; + TToken_string _key; + TAssoc_array _fields; + +protected: + void copy(const TPaf_record& rec) { _table = rec._table; _key = rec._key; _fields = rec._fields; } + const TString& var2str(const TString& fld, const TVariant& var) const; + +public: + void reset() { _fields.destroy(); } + void set(const char* fld, const TVariant& var); + void set(const char* fld, long var); + void set(const char* fld, const char* var); + void set(const char* fld, const real& var); + void set(const char* fld, const TString& var); + void set(const char* fld, const TDate& var); + void set(const char* fld, bool var); + const TVariant& get(const char* fld) const; + + bool insert(); + bool remove(); + bool search(); + bool search(const char* k1, const char* k2, const char* k3 = NULL); + + virtual TObject* dup() const { return new TPaf_record(*this); } + virtual bool ok() const { return _table.not_empty(); } + + TPaf_record& operator=(const TPaf_record& rec) { copy(rec); return *this; } + TPaf_record(const TPaf_record& rec) { copy(rec); } + TPaf_record(const char* table); +}; + +// Imposta il valore di un campo variant +void TPaf_record::set(const char* fld, const TVariant& var) +{ + CHECK(fld && *fld, "Null field name"); + + if (var.is_null()) + { + _fields.remove(fld); + } + else + { + TVariant* obj = (TVariant*)_fields.objptr(fld); + if (obj != NULL) + *obj = var; + else + _fields.add(fld, new TVariant(var)); + } +} + +// Imposta il valore di un campo intero +void TPaf_record::set(const char* fld, long val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo stringa +void TPaf_record::set(const char* fld, const char* val) +{ + if (val == NULL) + set(fld, NULL_VARIANT); + else + { + const TVariant var(val); + set(fld, var); + } +} + +// Imposta il valore di un campo stringa +void TPaf_record::set(const char* fld, const TString& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo numerico +void TPaf_record::set(const char* fld, const real& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo data in formato ISO +void TPaf_record::set(const char* fld, const TDate& val) +{ + if (val.ok()) + { + const TVariant var(val); + set(fld, var); + } + else + set(fld, ""); +} + +// Imposta il valore di un campo booleano +void TPaf_record::set(const char* fld, bool var) +{ + set(fld, var ? "SI" : "NO"); +} + +// Legge il valore di un campo variant +const TVariant& TPaf_record::get(const char* fld) const +{ + const TVariant* var = (const TVariant*)_fields.objptr(fld); + return var ? *var : NULL_VARIANT; +} + +// Converte un variant in una stringa valida per SQLite +const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) const +{ + const TFieldtypes vt = var.type(); + if (vt == _realfld) + { + const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ")>0 || fldname.find("PREZZO")>0); + TString& tmp = get_tmp_string(); + tmp << '\'' << v.string() << '\''; tmp.replace(',', '.'); + return tmp; + } + if (vt == _datefld) + { + TString& tmp = get_tmp_string(); + tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\''; + return tmp; + } + + const TString& str = var.as_string(); + + bool apici = vt == _alfafld; + if (apici && str[0] != '0' && real::is_natural(str)) + apici = false; + + if (!apici) + return str; + + TString& tmp = get_tmp_string(); + tmp = str; + for (int a = str.rfind('\''); a >= 0; a--) + { + if (tmp[a] == '\'') + tmp.insert("'", a); + } + tmp.insert("'", 0); + tmp << '\''; + return tmp; +} + +// Elimina il record in base ai campi chiave +bool TPaf_record::remove() +{ + TString256 query; + query << "DELETE FROM " << _table << " WHERE "; + int nkf = 0; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + if (nkf++ > 0) + query << " AND "; + query << fld << '=' << var2str(fld, var); + } + } + CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table); + query << ';'; + return db().sq_set_exec(query); +} + +// Callback per la sottostante funzione search() +static int paf_search_record(void* jolly, int cols, char** values, char** names) +{ + TPaf_record& rec = *(TPaf_record*)jolly; + for (int i = 0; i < cols; i++) + rec.set(names[i], values[i]); + return 0; +} + +// Carica un record in base ai campi chiave +bool TPaf_record::search() +{ + CHECKS(_fields.items() >= _key.items(), "Can't search partial key on table ", _table); + TString256 query; + query << "SELECT * FROM " << _table << " WHERE "; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + query << fld << '=' << var2str(fld, var) << " AND "; + } + query.rtrim(5); + query << ';'; + // TODO: Da controllare + // return xvt_sql_execute(_db, query, paf_search_record, this) == 1; + return db().sq_set_exec(query); +} + +// Carica un record in base ad un massimo di 3 campi chiave +bool TPaf_record::search(const char* k1, const char* k2, const char* k3) +{ + _fields.destroy(); + + set(_key.get(0), k1); + set(_key.get(1), k2); + if (k3 && *k3) + set(_key.get(2), k3); + + return search(); +} + +// Aggiunge un record al db +bool TPaf_record::insert() +{ + CHECKS(_fields.items() > _key.items(), "Can't insert empty record on table ", _table); + + TString query, values; + query << "INSERT INTO " << _table << "\n("; + FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + query << fld << ','; + values << var2str(fld, var) << ','; + } + } + query.rtrim(1); values.rtrim(1); + query << ")\nVALUES (" << values << ");"; + //return xvt_sql_execute(_db, query, NULL, 0L) == 1; + return db().sq_set_exec(query); +} + +// Crea un record della tabella data ed imposta i nomi dei campi chiave +TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',') +{ + _key = ini_get_string("./paf.ini", table, "INDEX_1"); + if (_key.empty()) + { + // Cerco di costruire i nomi della chiave cercando la K, come in P1_KEYHEADERFATT + TConfig cfg("paf.ini", table); + TAssoc_array& fields = cfg.list_variables(); + FOR_EACH_ASSOC_STRING(fields, obj, key, str) + { + if (key[3] == 'K') + _key.add(key); + } + } + CHECKS(!_key.empty_items(), "Invalid primary key for table ", table); +} + +///////////////////////////////////////////////////////////////////////////////////// +// TPa_mask +///////////////////////////////////////////////////////////////////////////////////// + +class TPA_mask : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + + void fill(); + void init(); + bool is_fattura(const TRectype& doc) const; + +public: + TPA_mask() : TAutomask("fp0200a") { } +}; + +bool TPA_mask::is_fattura(const TRectype& doc) const +{ + const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); + if (!td.is_fattura()) // Tengo per buone solo le fatture e le note di credito + return false; + + const TCodice_numerazione& cn = cached_numerazione(doc.get(DOC_CODNUM)); + return cn.tipo() == 2 && !cn.get_bool("B10"); // Controlla se fattura provvisioria esclusa da P.A. +} + + +void TPA_mask::fill() +{ + TSheet_field& docs = sfield(F_DOCS); + TString_array& sht = docs.rows_array(); + docs.hide(); + + sht.destroy(); + + // Seleziona tutti i clienti che sono pubbliche amministrazioni (PADESTIN!='') + TString query; + query << "USE 17 SELECT PADESTIN!=''" + << "\nJOIN 20 INTO TIPOCF=TIPOCF CODCF==CODCF" + << "\nFROM TIPOCF=C\nTO TIPOCF=C"; + + TISAM_recordset clifo_pa(query); + const TRecnotype n = clifo_pa.items(); + if (n > 0) + { + const TDate dal = get(F_DATAINI); + const bool hide_processed = !get_bool(F_SHOWALL); + + // Record di controllo per eventuali elaborazioni precedenti + TString hfatt(8), bfatt(20); + TPaf_record paf0100f("PAF0100F"); + + TProgress_monitor pi(n, NULL); + for (bool okc = clifo_pa.move_first(); okc; okc = clifo_pa.move_next()) + { + if (!pi.add_status()) + break; + + query.cut(0); + query << "USE 33 KEY 2\nSELECT (BETWEEN(STATO,2,8))"; + query << "\nFROM TIPOCF=C CODCF=#CLIENTE PROVV=D ANNO=" << dal.year() << " DATADOC=" << dal.date2ansi() + << "\nTO TIPOCF=C CODCF=#CLIENTE PROVV=D"; + TISAM_recordset doc_pa(query); + doc_pa.set_var("#CLIENTE", clifo_pa.get(CLI_CODCF)); + const TRectype& doc = doc_pa.cursor()->curr(); + for (bool okd = doc_pa.move_first(); okd; okd = doc_pa.move_next()) + { + const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); + if (!td.is_fattura()) // Tengo per buone solo le fatture e le note di credito + continue; + + bool sent = false; + if (chiave_paf(doc, hfatt, bfatt)) + { + if (paf0100f.search(hfatt, bfatt)) + { + sent = paf0100f.get("P1_GESTIONE").as_string() == "X"; + if (sent && hide_processed) + continue; + } + } + TToken_string* row = new TToken_string; + *row = sent ? " " : "X"; + row->add(doc_pa.get(DOC_ANNO).as_int(), 1); + row->add(doc_pa.get(DOC_CODNUM).as_string()); + row->add(doc_pa.get(DOC_NDOC).as_int()); + row->add(doc_pa.get(DOC_DATADOC).as_date()); + row->add(clifo_pa.get(CFV_CODCF).as_int()); + row->add(clifo_pa.get("20." CLI_RAGSOC).as_string()); + row->add(clifo_pa.get(CFV_PADESTIN).as_string()); + row->add(clifo_pa.get(CFV_PARIFAMM).as_string()); + row->add(clifo_pa.get("20." CLI_COFI).as_string()); + + bool split = clifo_pa.get("20." CLI_SPLITPAY).as_bool(); + if (split) + { + const long numreg = doc_pa.get(DOC_NUMREG).as_int(); + if (numreg > 0) + { + const TRectype& mov = cache().get(LF_MOV, numreg); + split = is_split_payment(mov); + } + } + row->add(split ? "X" : " "); + + const bool attach = !doc_pa.get("COLL_GOLEM").is_empty(); + row->add(attach ? "X" : " "); + + sht.add(row); + } + } + } + docs.force_update(); + docs.show(); +} + +bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_DATAINI: + if (e == fe_init) + o.set(ini_get_string(CONFIG_DITTA, "pa", "LastXML", "31-03-2015")); else + if (e == fe_modify) + fill(); else + if (e == fe_close) + ini_set_string(CONFIG_DITTA, "pa", "LastXML", o.get()); + break; + case F_SHOWALL: + if (e == fe_modify) + fill(); + break; + case F_DOCS: + if (e == fe_init) + fill(); + if (e == se_query_add || e == se_query_del) + return false; + break; + case DLG_USER: + if (e == fe_button && jolly > 0) + { + TSheet_field& docs = sfield(F_DOCS); + TToken_string& row = docs.row(docs.selected()); + TRectype doc(LF_DOC); + doc.put(DOC_PROVV, 'D'); + doc.put(DOC_ANNO, row.get(1)); + doc.put(DOC_CODNUM, row.get()); + doc.put(DOC_NDOC, row.get()); + if (doc.edit()) + fill(); + } + break; + case DLG_ALL: + { + if (e == fe_button) + { + TSheet_field& docs = sfield(F_DOCS); + TString_array& sht = docs.rows_array(); + const int items = sht.items(); + + if (items > 0) + { + const TString4 select = *(sht.row(0).get(0)) == 'X' ? "" : "X"; + for (int i = 0; i < items; i++) + sht.row(i).add(select, 0); + docs.force_update(); + } + } + } + break; + default: break; + } + return true; +} + +///////////////////////////////////////////////////////////////////////////////////// +// TDoc2Paf +///////////////////////////////////////////////////////////////////////////////////// + +class TDoc2Paf : public TSkeleton_application +{ + TAnagrafica _ditta; + TString16 _cofi; + TFilename _dbname; + TLog_report* _log; + TString _logpaf; + +private: + int parse_line(const TString& line, TString& var, TString& val) const; + bool create_table(TScanner& paf, const TString& table); + + const TRectype* find_parent_row(const TRectype& rdoc) const; + int find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const; + +protected: + bool parse_sconto(const TString& formula, TToken_string& sconti) const; + bool get_bnp_iban(const TString& abi, const TString& cab, int prg, TString& iban) const; + bool get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const; + const char* descrizione(const TRiga_documento& rdoc) const; + const TRectype& cco(const TRectype& doc) const; // Contratto/Convenzione/Offerta + + void log(int severity, const char* msg); + bool show_log(); + const char * natura(const TString& codiva) const; + void set_IVA(const TString& codiva, TPaf_record& paf) const; + void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const; + + bool elabora(TDocumentoEsteso& doc); + bool elabora(const TRectype& rec); + bool elabora(const TDoc_key& key); + bool elabora(const TFilename& ini); + bool genera_xml(); + +public: + virtual bool create(); + virtual bool destroy(); + virtual void main_loop(); + + TDoc2Paf() : _log(NULL) {} +}; + +bool TDoc2Paf::parse_sconto(const TString& formula, TToken_string& sconti) const +{ + sconti.cut(0); + int start = 0; + for (int i = 0; ; i++) + { + const char c = formula[i]; + if (c == '+' || c == '-' || c < ' ') + { + if (i > 0) + { + TString8 tok = formula.sub(start, i); + tok.replace(',', '.'); + const real perc = tok; + if (!perc.is_zero()) + sconti.add(tok); + } + if (c < ' ') + break; + start = i; + } + } + return sconti.full(); +} + +bool TDoc2Paf::get_bnp_iban(const TString& abi, const TString& cab, int nprog, TString& iban) const +{ + TTable bnp("BNP"); + TString16 key; + key << abi << cab; + if (nprog > 0) + { + TString4 sprog; sprog.format("%02d", nprog); + key << sprog; + } + bnp.put("CODTAB", key); + int err = bnp.read(_isgteq); + if (err == NOERR && !bnp.get("CODTAB").starts_with(abi)) + err = _iskeynotfound; + if (err == NOERR) + iban = bnp.get("S3"); + + return err == NOERR; +} + +bool TDoc2Paf::get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const +{ + bool found = false; + abi = doc.get(DOC_CODABIP); + cab = doc.get(DOC_CODCABP); + int prg = doc.get_int(DOC_PROGBNP); + + found = abi.full() && cab.full(); + if (found) + get_bnp_iban(abi, cab, prg, iban); + + if (!found) // Se non trovo banca sul DOC la cerco su CFBAN + { + TToken_string key; + key.add("C"); key.add(doc.codcf()); key.add("N"); key.add(1); + const TRectype& cfban = cache().get(LF_CFBAN, key); + if (!cfban.empty()) + { + abi = cfban.get(CFBAN_ABI); + cab = cfban.get(CFBAN_CAB); + prg = cfban.get_int(CFBAN_PROGPR); + found = abi.full() && cab.full(); + iban = cfban.get(CFBAN_IBAN); + if (found && iban.blank()) + get_bnp_iban(abi, cab, prg, iban); + } + } + + if (!found) // Se non trovo banca su CFBAN la cerco su CFVEN + { + const TRectype& cfven = doc.clifor().vendite(); + abi = cfven.get(CFV_CODABIPR); + cab = cfven.get(CFV_CODCABPR); + found = abi.full() && cab.full(); + if (found) + get_bnp_iban(abi, cab, 0, iban); + } + + if (found) + istituto = cache().get("%BAN", abi, "S0"); + + return found; +} + +const char* TDoc2Paf::descrizione(const TRiga_documento& rdoc) const +{ + if (rdoc.get_bool(RDOC_DESCLUNGA)) + { + TString tmp; + tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST); + tmp.replace('\n', ' '); tmp.strip_double_spaces(); tmp.trim(); + TParagraph_string para(tmp, 100); + return para.get(0); + } + return rdoc.get(RDOC_DESCR); +} + +const TRectype* TDoc2Paf::find_parent_row(const TRectype& rdoc) const +{ + const long id = rdoc.get_long(RDOC_DAIDRIGA); + if (id > 0L) + { + TToken_string key; + key.add(rdoc.get(RDOC_DACODNUM)); + if (key.full()) + { + key.add(rdoc.get(RDOC_DAANNO)); + key.add(rdoc.get(RDOC_DAPROVV)); + key.add(rdoc.get(RDOC_DANDOC)); + for (int r = 0; ; r++) + { + if (r == 0) + key.add(id, 4); + else + key.add(r, 4); + const TRectype& rec = cache().get(LF_RIGHEDOC, key); + if (r > 0 && rec.empty()) + break; + if (rec.get_long(RDOC_IDRIGA) == id) + return &rec; + } + } + } + return NULL; +} + +int TDoc2Paf::find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const +{ + if (rdoc.is_articolo()) + { + for (const TRectype* prdoc = find_parent_row(rdoc); prdoc != NULL; prdoc = find_parent_row(*prdoc)) + { + const TCodice_numerazione& cn = cached_numerazione(prdoc->get(RDOC_CODNUM)); + const int td = cn.tipo(); + if (td > 0 && ancestors.objptr(td) == NULL) + ancestors.add(new TAncestor(*prdoc), td); + } + } + return ancestors.items(); +} + +const TRectype& TDoc2Paf::cco(const TRectype& doc) const +{ + TString80 conkey; + const TString& con = doc.get(DOC_CONTRATTO); + if (con.full()) + { + char tcon = doc.get_char(DOC_MODPAG); + if (tcon < 'C') tcon = 'C'; + conkey.format("%c%6ld%s", tcon, doc.get_long(DOC_CODCF), (const char*)con); + } + return cache().get("&CON", conkey); +} + +void TDoc2Paf::log(int severity, const char* msg) +{ + if (severity < 0) + { + _logpaf = msg; + } + else + if (_log == NULL) + { + _log = new TLog_report; + if (_logpaf.full()) + { + TString txt; + txt << _logpaf << ": " << msg; + _log->log(severity, txt); + } + else + _log->log(severity, msg); + } +} + +bool TDoc2Paf::show_log() +{ + bool ok = true; + if (_log) + { + _log->preview(); + delete _log; + _log = NULL; + ok = noyes_box(TR("Si desidera procedere con la generazione file xml?")); + } + return ok; +} + + +const char * TDoc2Paf::natura(const TString& codiva) const +{ + const TRectype& ai = cache().get("%IVA", codiva); + TString & natura = get_tmp_string(4); + + natura = ai.get("S12"); + if (natura.blank()) + { + const int tipo_iva11 = ai.get_int("S2"); + const bool revcharge = tipo_iva11 >= 31 && tipo_iva11 <= 38; + const TString& tipo = ai.get("S1"); + const int tipo_vendite = ai.get_int("S7"); + + // N1 escluse ex art 15 + if (tipo_vendite == 5) + natura = "N5"; // regime del margine + else + if (revcharge) + natura = "N6"; // Inversione contabile (REVERSE CHARGE) + else + if (tipo == "NS") + natura = "N2"; // Non soggetto + else + if (tipo == "NI") + natura = "N3"; // Non imponibile + else + if (tipo == "ES") + natura = "N4"; // Esente + } + return natura; +} + +void TDoc2Paf::set_IVA(const TString& codiva, TPaf_record& paf) const +{ + const TRectype& ai = cache().get("%IVA", codiva); + const real aliquota = ai.get("R0"); + paf.set("PI_ALIQUOTAIVA", aliquota); + if (codiva.full()) + { + if (aliquota.is_zero()) + paf.set("PI_NATURA", natura(codiva)); + else + paf.set("PI_NATURA", ""); + } +} + +void TDoc2Paf::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const +{ + const TString8 codiva(rdoc.get(RDOC_CODIVA)); + const TRectype& ai = cache().get("%IVA", codiva); + const real aliquota = ai.get("R0"); + paf.set("PI_ALIQUOTAIVA", aliquota); + if (codiva.full()) + { + if (aliquota.is_zero()) + paf.set("PI_NATURA", natura(codiva)); + else + paf.set("PI_NATURA", ""); + } +} + + +bool TDoc2Paf::elabora(TDocumentoEsteso& doc) +{ + TString8 hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. + TString20 bfatt; // Codice univoco di 20 caratteri del documento + if (!chiave_paf(doc, hfatt, bfatt)) + return false; + log(-1, bfatt); + + const TFirm& firm = prefix().firm(); + const char* const paese = "IT"; + TCausale caus = TCausale(doc.tipo().causale(), doc.anno()); + + // + TPaf_record paf0100f("PAF0100F"); + paf0100f.set("P1_KEYHEADERFATT", hfatt); + paf0100f.set("P1_KEYBODYFATT", bfatt); + paf0100f.remove(); + + paf0100f.set("P1_TRASMITTPAESE", paese); + paf0100f.set("P1_TRASMITTCOD", _cofi); + paf0100f.set("P1_PRGINVIO", ""); // Ci pensa SiAggPA + paf0100f.set("P1_FMTTRASMISS", "SDI11"); // SDI11 si usa dal 2015 per lo split payment (prima era SDI10) + + paf0100f.set("P1_CODDEST", hfatt); + TString80 tel; tel << firm.get(NDT_PTEL) << firm.get(NDT_TEL); + paf0100f.set("P1_TELEFONO", tel); + paf0100f.set("P1_MAIL", firm.get(NDT_MAIL)); + paf0100f.set("P1_GESTIONE", "D"); + paf0100f.insert(); + // + + // + TPaf_record paf0200f("PAF0200F"); + paf0200f.set("P2_KEYHEADERFATT", hfatt); + paf0200f.set("P2_KEYBODYFATT", bfatt); + paf0200f.remove(); + + if (_ditta.partita_IVA().full()) + { + paf0200f.set("P2_FISCIVAPAESE", paese); // Sempre IT + paf0200f.set("P2_FISCIVACOD", _ditta.partita_IVA()); + } + paf0200f.set("P2_CODFISCALE", _ditta.codice_fiscale()); + if (_ditta.fisica()) + { + paf0200f.set("P2_ANANOME", _ditta.nome()); + paf0200f.set("P2_ANACOGNOME", _ditta.cognome()); + } + else + { + paf0200f.set("P2_ANADENOMIN", _ditta.ragione_sociale()); + } + + const char* regime_fiscale = "RF01"; + if (doc.get_bool(DOC_IVAXCASSA)) + { + // Supponiamo volume d'affari > 200000, altrimenti sarebbe RF17 + regime_fiscale = "RF16"; + } + paf0200f.set("P2_REGFISCALE", regime_fiscale); + + // DatiSede + paf0200f.set("P2_SEDEIND", _ditta.via_residenza()); + paf0200f.set("P2_SEDENRCIVICO", _ditta.civico_residenza()); + paf0200f.set("P2_SEDECAP", _ditta.CAP_residenza()); + paf0200f.set("P2_SEDECOMUNE", _ditta.comune_residenza()); + paf0200f.set("P2_SEDEPROV", _ditta.provincia_residenza()); + paf0200f.set("P2_SEDENAZ", paese); + paf0200f.set("P2_GESTIONE", "D"); + + TAnagrafica cliente(doc.clifor()); + + TString rifamm = cco(doc).get("S4"); + if (rifamm.blank()) + rifamm = doc.clifor().vendite().get(CFV_PARIFAMM); + paf0200f.set("P2_RIFAMMINISTR", rifamm); + + TISAM_recordset unloc("USE UNLOC\nJOIN COMUNI INTO COM==COMCCIAA\nFROM CODDITTA=#DITTA\nTO CODDITTA=#DITTA"); + unloc.set_var("#DITTA", firm.get(NDT_CODDITTA)); + if (unloc.move_first()) + { + const TString& numrea = unloc.get(ULC_NUMCCIAA).as_string(); + if (numrea.full()) + { + paf0200f.set("P2_ISCRREANUM", numrea); + paf0200f.set("P2_ISCRREAUFF", unloc.get("13->" COM_PROVCOM)); + } + } + + if (_ditta.giuridica()) + { + TISAM_recordset anagiu("USE ANAGIU\nFROM CODANAGR=#CODICE\nTO CODANAGR=#CODICE"); + anagiu.set_var("#CODICE", firm.get(NDT_CODANAGR)); + if (anagiu.move_first()) + { + paf0200f.set("P2_ISCRREACAP", anagiu.get(ANG_CAPSOC)); + const int ss = anagiu.get(ANG_STATOSOC).as_int(); + paf0200f.set("P2_ISCRREASLIQUID", (ss == 2 || ss == 3) ? "LS" : "LN"); + } + } + else + paf0200f.set("P2_ISCRREASLIQUID", "LN"); + + paf0200f.insert(); + + // + + // + + TPaf_record paf0400f("PAF0400F"); + paf0400f.set("P4_KEYHEADERFATT", hfatt); + paf0400f.set("P4_KEYBODYFATT", bfatt); + paf0400f.remove(); + + if (cliente.partita_IVA().full()) + { + paf0400f.set("P4_FISCIVAPAESE", paese); + paf0400f.set("P4_FISCIVACOD", cliente.partita_IVA()); + } + paf0400f.set("P4_CODFISC", cliente.codice_fiscale()); + + if (cliente.fisica()) + { + paf0400f.set("P4_ANANOME", cliente.nome()); + paf0400f.set("P4_ANACOGNOME", cliente.cognome()); + } + else + { + paf0400f.set("P4_ANADENOM", cliente.ragione_sociale()); + } + + // DatiSede + paf0400f.set("P4_SEDEIND", cliente.via_residenza()); + paf0400f.set("P4_SEDENRCIVICO", cliente.civico_residenza()); + paf0400f.set("P4_SEDECAP", cliente.CAP_residenza()); + paf0400f.set("P4_SEDECOMUNE", cliente.comune_residenza()); + paf0400f.set("P4_SEDEPROV", cliente.provincia_residenza()); + paf0400f.set("P4_SEDENAZ", "IT"); + paf0400f.set("P4_GESTIONE", "D"); + paf0400f.insert(); + // + + // + TPaf_record paf0700f("PAF0700F"); + paf0700f.set("P7_KEYHEADERFATT", hfatt); + paf0700f.set("P7_KEYBODYFATT", bfatt); + paf0700f.remove(); + paf0700f.set("P7_TIPODOC", doc.is_nota_credito() ? "TD04" : "TD01"); + paf0700f.set("P7_DIVISA", "EUR"); // Aggiungere codice ISO 4217 a tabella divise (%VAL) + paf0700f.set("P7_DATA", doc.data()); + + const TCodice_numerazione& codnum = doc.codice_numerazione(); + TString20 numdoc; codnum.complete_num(doc.numero(), numdoc); + paf0700f.set("P7_NUMERO", numdoc); + paf0700f.set("P7_GESTIONE", "D"); + paf0700f.insert(); + + // + TPaf_record paf0900f("PAF0900F"); + paf0900f.set("P9_KEYHEADERFATT", hfatt); + paf0900f.set("P9_KEYBODYFATT", bfatt); + paf0900f.remove(); + + TString80 sconto_expr = doc.get(DOC_SCONTOPERC); + TToken_string sconti; + if (parse_sconto(sconto_expr, sconti)) + { + long nlin_sconto = 0; + FOR_EACH_TOKEN(sconti, str) + { + const real sconto = str; + if (!sconto.is_zero()) // Precauzione inutile + { + paf0900f.set("P9_RIFNUMLINEA", ++nlin_sconto); + if (sconto > ZERO) + { + paf0900f.set("P9_TIPOSCONTO", "SC"); + paf0900f.set("P9_PERCSCONTO", sconto); + } + else + { + paf0900f.set("P9_TIPOSCONTO", "MG"); + paf0900f.set("P9_PERCSCONTO", -sconto); + } + paf0900f.set("P9_GESTIONE", "D"); + paf0900f.insert(); + } + } + } + // + + // + TPaf_record paf2700f("PAF2700F"); + paf2700f.set("PQ_KEYHEADERFATT", hfatt); + paf2700f.set("PQ_KEYBODYFATT", bfatt); + paf2700f.remove(); + paf2700f.set("PQ_IMPTOTDOC", doc.totale_doc()); + + const TRectype& cont_conv_off = cco(doc); + TString causale = cont_conv_off.get("S1"); + if (causale.full()) + { + causale << ' ' << cont_conv_off.get("S2"); + causale << ' ' << cont_conv_off.get("S3"); + causale.strip_double_spaces(); + causale.cut(200); + } + else + causale = doc.tipo().descrizione(); + paf2700f.set("PQ_CAUSALE", causale); + // paf2700f.set("PQ_ART73", true); + paf2700f.set("PQ_GESTIONE", "D"); + paf2700f.insert(); + // + + // Azzera contratti + TPaf_record paf1000f("PAF1000F"); + paf1000f.set("P0_KEYHEADERFATT", hfatt); + paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.remove(); + + // Azzera convenzioni + TPaf_record paf1100f("PAF1100F"); + paf1100f.set("PA_KEYHEADERFATT", hfatt); + paf1100f.set("PA_KEYBODYFATT", bfatt); + paf1100f.remove(); + + // Azzera ordini + TPaf_record paf1200f("PAF1200F"); + paf1200f.set("PB_KEYHEADERFATT", hfatt); + paf1200f.set("PB_KEYBODYFATT", bfatt); + paf1200f.remove(); + + // Azzera DDT + TPaf_record paf1600f("PAF1600F"); + paf1600f.set("PF_KEYHEADERFATT", hfatt); + paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.remove(); + + const TString16 cup = doc.get(DOC_CUP); + const TString16 cig = doc.get(DOC_CIG); + const TString80 com = doc.get(DOC_CODCMS); + + TString80 con = doc.get(DOC_CONTRATTO); + if (con.full() || cup.full() || cig.full()) + { + char tcon = doc.get_char(DOC_MODPAG); + if (tcon < 'C') tcon = 'C'; + + TDate datadoc; // Data contratto non obbligatoria + if (con.full()) + { + datadoc = cco(doc).get_date("D0"); + } + else + { + // IdDocumento obbligatorio + con = cig; + if (con.blank()) + con = cup; + } + + if (tcon == 'O') + { + paf1000f.set("P0_RIFNUMLINEA", 0L); + paf1000f.set("P0_IDDOC", con); + paf1000f.set("P0_DATADOC", datadoc); + paf1000f.set("P0_COMMCONVENZ", com); + paf1000f.set("P0_CODCUP", cup); + paf1000f.set("P0_CODCIG", cig); + paf1000f.set("P0_GESTIONE", "D"); + paf1000f.insert(); + } + else + if (tcon == 'C') + { + paf1100f.set("PA_RIFNUMLINEA", 0L); + paf1100f.set("PA_IDDOC", con); + paf1100f.set("PA_DATADOCU", datadoc); + paf1100f.set("PA_COMMCONVENZ", com); + paf1100f.set("PA_CODCUP", cup); + paf1100f.set("PA_CODCIG", cig); + paf1000f.set("PA_GESTIONE", "D"); + paf1100f.insert(); + } + else + { + paf1200f.set("PB_RIFNUMLINEA", 0L); + paf1200f.set("PB_IDDOC", con); + paf1200f.set("PB_DATADOCO", datadoc); + paf1200f.set("PB_COMMCONVENZ", com); + paf1200f.set("PB_CODCUP", cup); + paf1200f.set("PB_CODCIG", cig); + paf1200f.set("PB_GESTIONE", "D"); + paf1200f.insert(); + } + } + + if (cup.blank() && cig.blank()) + log(1, "CIG e CUP assenti"); + + // + + TPaf_record paf1800f("PAF1800F"); + paf1800f.set("PI_KEYHEADERFATT", hfatt); + paf1800f.set("PI_KEYBODYFATT", bfatt); + paf1800f.remove(); // Cancella tutte le righe documento + + TPaf_record paf2000f("PAF2000F"); + paf2000f.set("PJ_KEYHEADERFATT", hfatt); + paf2000f.set("PJ_KEYBODYFATT", bfatt); + paf2000f.remove(); // Cancella tutti gli sconti di riga + + long riga = 0; + TString16 codivadefault; + { + FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) + { + codivadefault = rdoc->get(RDOC_CODIVA); + if (codivadefault.full()) + break; + } + } + FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) + { + paf1800f.reset(); + paf1800f.set("PI_KEYHEADERFATT", hfatt); + paf1800f.set("PI_KEYBODYFATT", bfatt); + paf1800f.set("PI_NUMEROLINEA", ++riga); + paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc)); + // paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione + + + set_IVA(codivadefault, paf1800f); + + if (rdoc->is_merce()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + const real qta = rdoc->get(RDOC_QTA); + if (qta.is_zero()) + { + TString msg; msg.format("La riga merce %d ha quantità nulla", riga); + log(1, msg); + } + if (qta >= ZERO) + { + paf1800f.set("PI_QUANTITA", qta); + paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false)); + } + else + { + paf1800f.set("PI_QUANTITA", -qta); + paf1800f.set("PI_PREZZOUNIT", -rdoc->prezzo(true, false)); + } + paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false)); + set_IVA(*rdoc, paf1800f); + + /* + const TDate data = doc.get(DOC_DATADOC); + paf1800f.set("PI_DTINIZIOPER", data); + paf1800f.set("PI_DTFINEPER", data); + */ + + // + + sconto_expr = rdoc->get(RDOC_SCONTO); + if (parse_sconto(sconto_expr, sconti)) + { + long nlin_sconto = 0; + FOR_EACH_TOKEN(sconti, str) + { + const real perc = str; + if (!perc.is_zero()) + { + paf2000f.set("PJ_KEYNLINEA", (long)r); + paf2000f.set("PJ_KEYNPROGR", ++nlin_sconto); + if (perc > ZERO) + { + paf2000f.set("PJ_TIPOSCONTO", "SC"); + paf2000f.set("PJ_PERCSCONTO", perc); + } + else + { + paf2000f.set("PJ_TIPOSCONTO", "MG"); + paf2000f.set("PJ_PERCSCONTO", -perc); + } + paf2000f.set("PJ_GESTIONE", "D"); + paf2000f.insert(); + } + } + } + // + + TArray ancestors; find_ancestors(*rdoc, ancestors); + for (int i = ancestors.last(); i > 0; i = ancestors.pred(i)) + { + const TAncestor& a = (const TAncestor&)ancestors[i]; + if (i == 1) + { + TPaf_record paf1600f("PAF1600F"); + paf1600f.reset(); + paf1600f.set("PF_KEYHEADERFATT", hfatt); + paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.set("PF_RIFNUMLINEA", (long)r); + paf1600f.set("PF_NUMDDDT", a._numdoc); + paf1600f.set("PF_DATADDT", a._datadoc); + paf1600f.set("PF_GESTIONE", "D"); + paf1600f.insert(); + } + else + if (i == 3) + { + TPaf_record paf1000f("PAF1000F"); + paf1000f.set("P0_KEYHEADERFATT", hfatt); + paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.set("P0_RIFNUMLINEA", (long)r); + paf1000f.set("P0_IDDOC", a._numdoc); + paf1000f.set("P0_DATADOC", a._datadoc); + paf1000f.set("P0_COMMCONVENZ", com); + paf1000f.set("P0_CODCUP", cup); + paf1000f.set("P0_CODCIG", cig); + paf1000f.set("P0_GESTIONE", "D"); + paf1000f.insert(); + } + } + } + else + if (rdoc->is_spese()) + { + const TSpesa_prest& sp = rdoc->spesa(); + const real imp = rdoc->importo(true, false); + real qta = UNO; + if (sp.is_tipo()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + qta = rdoc->get_real(RDOC_QTA); + if (qta.is_zero()) + { + TString msg; msg.format("La riga spese a quantità %d ha quantità nulla (campo %s)", riga, (const char*)rdoc->field_qta()); + log(1, msg); + qta = UNO; + } + paf1800f.set("PI_QUANTITA", qta); + } + real prz = imp; + if (qta != UNO) + { + prz = rdoc->prezzo(true, false); + if (prz.is_zero() && !imp.is_zero()) + { + const TPrice price(imp / qta); + prz = price.get_value(); + } + } + paf1800f.set("PI_PREZZOUNIT", prz); + paf1800f.set("PI_PRZTOTALE", imp); + set_IVA(*rdoc, paf1800f); + } + else + if (rdoc->is_prestazione()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + real qta = rdoc->get(RDOC_QTA); if (qta.is_zero()) qta = UNO; + paf1800f.set("PI_QUANTITA", qta); + paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false)); + paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false)); + set_IVA(*rdoc, paf1800f); + } + + paf1800f.set("PI_GESTIONE", "D"); + paf1800f.insert(); + } + // + + // + TPaf_record paf2200f("PAF2200F"); + paf2200f.set("PL_KEYHEADERFATT", hfatt); + paf2200f.set("PL_KEYBODYFATT", bfatt); + paf2200f.remove(); // Cancella tutte le righe di riepilogo IVA + + const char* eiva = "I"; // Esigibilità IVA: Immediata, Differita, Split payment + if (doc.is_split_payment()) + eiva = "S"; else + if (doc.get_bool(DOC_LIQDIFF) || doc.get_bool(DOC_IVAXCASSA)) + eiva = "D"; + + long num_riep = 0; + TAssoc_array& tiva = doc.tabella_iva(false); + FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm) + { + const TRiepilogo_iva& riva = *(const TRiepilogo_iva*)itm; + const real aliquota = riva.cod_iva().percentuale(); + paf2200f.set("PL_KEYNPROGR", ++num_riep); + paf2200f.set("PL_ALIQUOTAIVA", aliquota); + if (aliquota.is_zero()) + paf2200f.set("PL_NATURA", natura(riva.cod_iva().codice())); + + paf2200f.set("PL_IMPONIBILE", riva.imponibile()); + paf2200f.set("PL_IMPOSTA", riva.imposta()); + paf2200f.set("PL_ESIGIVA", eiva); + if (*eiva == 'S') + paf2200f.set("PL_RIFNORMATIVO", "Scissione pagamenti art.17-ter DPR 633/72"); + else + paf2200f.set("PL_RIFNORMATIVO", riva.cod_iva().descrizione()); + paf2200f.set("PL_GESTIONE", "D"); + paf2200f.insert(); + } + // + + // + TPaf_record paf2400f("PAF2400F"); + paf2400f.set("PN_KEYHEADERFATT", hfatt); + paf2400f.set("PN_KEYBODYFATT", bfatt); + paf2400f.remove(); // Cancella i dati pagamento + + TPagamento& pag = doc.pagamento(); + doc.scadenze_recalc(); // Ricalcola array delle rate + TString_array& scad = doc.scadenze(); + const int nrate = scad.items(); // Conta rate generate + const char* rateazione = nrate > 1 ? "TP01" : "TP02"; // A rate (TP01) o una soluzione(TP02)? + paf2400f.set("PN_CONDPAGAMENTO", rateazione); + paf2400f.set("PN_GESTIONE", "D"); + paf2400f.insert(); + + TPaf_record paf2500f("PAF2500F"); + paf2500f.set("PO_KEYHEADERFATT", hfatt); + paf2500f.set("PO_KEYBODYFATT", bfatt); + paf2500f.remove(); // Cancella tutte le rate + + // Imposto i campi uguali per tutte le rate + paf2500f.set("PO_CONDPAGAMENTO", rateazione); // Condizione di pagamento PA + paf2500f.set("PO_CODICEPAGAM", pag.code()); // Condizione di pagamento CAMPO + + TString80 iban, istituto; + TString8 abi, cab; + if (get_bank(doc, iban, abi, cab, istituto)) + { + paf2500f.set("PO_ISTFINANZ", istituto); + paf2500f.set("PO_IBAN", iban); + paf2500f.set("PO_ABI", abi); + paf2500f.set("PO_CAB", cab); + } + + if (cab.blank()) + log(2, TR("Non sono presenti ABI, CAB, IBAN per il pagamento")); else + if (iban.blank()) + log(1, TR("Non è presente il codice IBAN per il pagamento")); + + for (int nr = 0; nr < nrate; nr++) + { + paf2500f.set("PO_KEYNPROGR", long(nr + 1)); // Numero rata + + const char* mod_pag = "MP01"; // Modalità di pagamento + const int n = nr < pag.n_rate() ? nr : 0; // Si assicura che il numero riga sia accettabile + switch (pag.tipo_rata(n)) + { + case _bonfico: mod_pag = "MP05"; break; // bonifico + case _rid: mod_pag = "MP09"; break; // RID + case _ric_ban: mod_pag = "MP12"; break; // RIBA + default: mod_pag = "MP01"; break; // contanti + } + paf2500f.set("PO_MODALITAPAGAM", mod_pag); + + TToken_string& riga = scad.row(nr); // Data|Importo + paf2500f.set("PO_DATASCADENZA", TDate(riga.get(0))); // Data scadenza + paf2500f.set("PO_IMPORTO", real(riga.get())); // Importo rata + + paf2500f.set("PO_GESTIONE", "D"); + paf2500f.insert(); + } + + TPaf_record paf2600f("PAF2600F"); + paf2600f.set("PP_KEYHEADERFATT", hfatt); + paf2600f.set("PP_KEYBODYFATT", bfatt); + paf2600f.remove(); // Cancella eventuali allegati + TToken_string allegati(doc.get("COLL_GOLEM"), '\n'); + if (allegati.full()) + { + long nprogr = 0; // Numero di file allegati + TFilename fname; + FOR_EACH_TOKEN(allegati, row) + { + const TToken_string entry(row); + if (entry.get(0, fname) && fname.exist()) + { + paf2600f.set("PP_KEYNPROGR", ++nprogr); + paf2600f.set("PP_NOMEATTACHMENT", fname.name()); + paf2600f.set("PP_ATTACHMENT", fname); + fname.upper(); // serve estensione maiuscola + paf2600f.set("PP_FMTATTACHMENT", fname.ext()); + paf2600f.insert(); + } + } + } + + // + + return true; +} + +bool TDoc2Paf::elabora(const TRectype& rec) +{ + bool done = false; + TDocumentoEsteso doc; + if (doc.read(rec) == NOERR) + { + // TODO: Da controllare + // xvt_sql_begin(_db); + done = elabora(doc); + if (done) + done = db().sq_commit(); + else + db().sq_rollback(); + } + return done; +} + +bool TDoc2Paf::elabora(const TDoc_key& key) +{ + TRectype rec(LF_DOC); + rec.put(DOC_PROVV, key.provv()); + rec.put(DOC_ANNO, key.anno()); + rec.put(DOC_CODNUM, key.codnum()); + rec.put(DOC_NDOC, key.ndoc()); + return elabora(rec); +} + +bool TDoc2Paf::elabora(const TFilename& ini) +{ + TConfig cfg(ini, "33"); + const int anno = cfg.get_int(DOC_ANNO); + const long ndoc = cfg.get_long(DOC_NDOC); + const TFixed_string codnum(cfg.get(DOC_CODNUM)); // lascio sapientemente per ultima la get di una stringa + const TDoc_key key(anno, codnum, ndoc); + return elabora(key); +} + + +bool TDoc2Paf::genera_xml() +{ +#define PABASE "SiaggPA" + + TFilename tmp; + + // Copia eventuali protezioni software + TString_array files; + if (list_files(PABASE"/*.ssa", files) == 0) + { + list_files("*.ssa", files); + FOR_EACH_ARRAY_ROW(files, i, row) + { + tmp = PABASE; tmp.add(*row); + xvt_fsys_fupdate(*row, tmp); + } + } + files.destroy(); + if (list_files(PABASE"/*.ssa", files) != 1) + warning_box(FR("Nella cartella %s deve essere presente esattamente un file .ssa"), PABASE); + + TFilename home; + xvt_sys_get_env("USERPROFILE", home.get_buffer(), home.size()); + home.add("SoftwareSirio"); home.add(PABASE); + if (!dexist(home)) + make_dir(home); + + tmp = home; tmp.add("config.properties"); + xvt_fsys_fupdate(PABASE"/config.properties", tmp); + + tmp = home; tmp.add("configGUI.properties"); + xvt_fsys_fupdate(PABASE"/configGUI.properties", tmp); + + if (tmp.exist()) + { + TJava_profile prop(tmp); + if (prop.get("percorso").blank()) + prop.set("percorso", _dbname.path()); + prop.set("nomePAF", _dbname); + } + else + cantread_box(tmp); + + tmp = PABASE"\\SiaggPACAMPO.jar"; + tmp.make_absolute_path(); + + DIRECTORY old_dir; xvt_fsys_get_dir(&old_dir); + DIRECTORY new_dir; xvt_fsys_convert_str_to_dir(tmp.path(), &new_dir); + xvt_fsys_set_dir(&new_dir); + const bool good = goto_url(tmp); + if (good) + xvt_sys_sleep(3000); + else + error_box(FR("Impossibile eseguire Java -jar %s"), (const char*)tmp); + xvt_fsys_set_dir(&old_dir); + + return good; +} + +void TDoc2Paf::main_loop() +{ + int ndocs = 0; + for (int a = 1; a < argc(); a++) + { + TFilename ini = argv(a); + if (ini.starts_with("-i", true) || ini.starts_with("/i", true)) + ini.ltrim(2); + if (ini.exist() && elabora(ini)) + ndocs++; + else + { + if (ini.find('*') >= 0 || ini.find('?') >= 0) + { + TString_array f; list_files(ini, f); + FOR_EACH_ARRAY_ROW(f, r, row) + { + ini = *row; + if (ini.exist() && elabora(ini)) + ndocs++; + } + } + } + } + if (ndocs > 0) + { + if (show_log()) + genera_xml(); + return; + } + + TPA_mask mask; + mask.set(F_COFI, _cofi); + while (mask.run() == K_ENTER) + { + _cofi = mask.get(F_COFI); + + TString_array& sht = mask.sfield(F_DOCS).rows_array(); + if (!sht.empty()) + { + TProgress_monitor pi(sht.items(), NULL); + ndocs = 0; + FOR_EACH_ARRAY_ROW(sht, r, riga) + { + if (riga->starts_with("X")) + { + const int anno = riga->get_int(1); + const long ndoc = riga->get_long(3); + const TFixed_string codnum(riga->get(2)); // lascio sapientemente per ultima la get di una stringa + const TDoc_key key(anno, codnum, ndoc); + if (elabora(key)) + ndocs++; + } + if (!pi.add_status(1)) + break; + } + message_box(FR("Sono stati elaborati %d documenti"), ndocs); + } + + if (ndocs > 0 && show_log()) + genera_xml(); + } +} + +int TDoc2Paf::parse_line(const TString& line, TString& var, TString& val) const +{ + if (line.blank()) + return 0; + + if (line[0] == '[') + { + var = line.mid(1); + var.rtrim(1); + val.cut(0); + return 1; + } + + const int equal = line.find('='); + if (equal < 6) + return 0; + var = line.left(equal); var.trim(); + val = line.mid(equal + 1); val.trim(); + return 2; +} + +bool TDoc2Paf::create_table(TScanner& paf, const TString& table) +{ + TString query, var, val; + if (xvt_sql_table_exists(_db, table)) + { + SLIST fields = xvt_sql_list_fields(_db, table); + while (!paf.eof()) + { + const TString& line = paf.line(); + const int n = parse_line(line, var, val); + if (n <= 0) + break; + if (var.starts_with("INDEX_")) + break; + if (xvt_slist_find_str(fields, var) == NULL) + { + query.cut(0) << "ALTER TABLE " << table << " ADD COLUMN " << var << ' ' << val << " NOT NULL"; + if (val.find("INT") >= 0 || val.find("NUM") >= 0) + query << " DEFAULT 0"; + else + query << " DEFAULT ''"; + query << ";"; + xvt_sql_execute(_db, query, NULL, NULL); // Create table + } + } + xvt_slist_destroy(fields); + } + else + { + query << "CREATE TABLE " << table << " ("; + while (!paf.eof()) + { + const TString& line = paf.line(); + const int n = parse_line(line, var, val); + if (n <= 0) + break; + if (n == 1) + { + paf.push(line); + break; + } + if (var.starts_with("INDEX_")) + { + query.rtrim(1); // toglie ultima , + query << ");"; + xvt_sql_execute(_db, query, NULL, NULL); // Create table + query.cut(0); + query << "CREATE UNIQUE INDEX " + << table << "_1 ON " << table + << " (" << val << ");"; + xvt_sql_execute(_db, query, NULL, NULL); // Create index + break; + } + else + { + query << "\n " << var << ' ' << val << " NOT NULL"; + if (val.find("INT") >= 0 || val.find("NUM") >= 0) + query << " DEFAULT 0"; + else + query << " DEFAULT ''"; + query << ","; + } + } + } + + return true; +} + +bool TDoc2Paf::create() +{ + open_files(LF_TAB, LF_TABCOM, LF_TABMOD, LF_ANAG, + LF_CLIFO, LF_CFVEN, LF_CFBAN, LF_NDITTE, + LF_DOC, LF_RIGHEDOC, 0); + + TRectype cfven(LF_CFVEN); + if (cfven.type(CFV_PARIFAMM) != _alfafld) + return error_box(TR("Database non convertito per fatturazione P.A.")); + + _ditta.init(LF_NDITTE, prefix().get_codditta()); + TString ad = ini_get_string(CONFIG_DITTA, "fp", "ip"); ad << "@" << ini_get_string(CONFIG_DITTA, "fp", "db"); + db().sq_connect( + ad, + ini_get_string(CONFIG_DITTA, "fp", "usr"), + decode(ini_get_string(CONFIG_DITTA, "fp", "psw")), + TSDB_MSSQL + ); + db().sq_set_autocommit(false); + if (db().sq_is_connect()) + return false; + + const TFilename ini = "paf.ini"; + bool ok = ini.exist(); + if (ok) + { + // TODO: Controllare begin + // xvt_sql_begin(_db); + TScanner paf(ini); + while (ok && !paf.eof()) + { + const TString& p = paf.line(); + if (p.starts_with("[PA") && p.ends_with("F]")) + { + TString16 table = p; table.strip("[]"); + ok = create_table(paf, table); + } + } + + if (ok) + { + TPaf_record panum("PANUM00F"); + panum.set("PJNKEY", "00001"); + if (!panum.search()) + { + panum.set("PJNINV", "0000000000"); + panum.insert(); + } + + db().sq_commit(); + } + else + db().sq_rollback(); + } + else + return cantread_box(ini); + + _cofi = ini_get_string(CONFIG_DITTA, "pa", "TRASMITTCOD"); + if (_cofi.blank()) + _cofi = _ditta.codice_fiscale(); + + return ok && TSkeleton_application::create(); +} + +bool TDoc2Paf::destroy() +{ + if (_cofi.full()) + ini_set_string(CONFIG_DITTA, "pa", "TRASMITTCOD", _cofi); + + return TSkeleton_application::destroy(); +} + +int fp0200(int argc, char* argv[]) +{ + //TFp_app t2t; + //t2t.run(argc, argv, TR("Trasferimento Fatture Elettroniche")); + return 0; +} \ No newline at end of file diff --git a/src/fp/fp0200.cpp~RF1e8fd00e.TMP b/src/fp/fp0200.cpp~RF1e8fd00e.TMP new file mode 100644 index 000000000..179283ca7 --- /dev/null +++ b/src/fp/fp0200.cpp~RF1e8fd00e.TMP @@ -0,0 +1,1757 @@ +#include "fp0.h" +#include "fp0200b.h" + +#include +#include +#include +#include + +#include "../ve/velib05.h" +#include "../cg/cglib03.h" + +#include "../fe/felib.h" + +#include +#include +#include +#include +#include +#include +#include "../cg/cfban.h" + +///////////////////////////////////////////////////////////////////////////////////// +// Utilities +///////////////////////////////////////////////////////////////////////////////////// + +SSimple_query& db() +{ + static SSimple_query* db = new SSimple_query(); + return *db; +} + +// Crea la coppia di chiavi per il db PAF a partire da un documento vero e proprio +static bool chiave_paf(const TDocumento& doc, TString& cess, TString& numdoc) +{ + cess = doc.clifor().vendite().get(CFV_PADESTIN); + CHECK(cess.full(), "Destinatario fattura P.A. non valido"); + + const TCodice_numerazione& codnum = doc.codice_numerazione(); + const long ndoc = doc.numero(); + TString16 fullnumdoc; codnum.complete_num(ndoc, fullnumdoc); + + numdoc.cut(0) << doc.get(DOC_ANNO) << '/' << codnum.codice() << '/' << fullnumdoc; + return cess.full(); +} + +// Crea la coppia di chiavi per il db PAF a partire da un semplice record di testata documento +static bool chiave_paf(const TRectype& doc, TString& cess, TString& numdoc) +{ + const long codcf = doc.get_long(DOC_CODCF); + TString8 key; key.format("C|%ld", codcf); + cess = cache().get(LF_CFVEN, key, CFV_PADESTIN); + CHECK(cess.full(), "Destinatario fattura P.A. non valido"); + + const TCodice_numerazione& codnum = cached_numerazione(doc.get(DOC_CODNUM)); + const long ndoc = doc.get_long(DOC_NDOC); + TString16 fullnumdoc; codnum.complete_num(ndoc, fullnumdoc); + numdoc.cut(0) << doc.get(DOC_ANNO) << '/' << codnum.codice() << '/' << fullnumdoc; + + return cess.full(); +} + + +///////////////////////////////////////////////////////////////////////////////////// +// TAncestor +///////////////////////////////////////////////////////////////////////////////////// + +struct TAncestor : public TObject +{ + TString20 _numdoc; + TDate _datadoc; + + TAncestor(const TRectype& rdoc); +}; + +TAncestor::TAncestor(const TRectype& rdoc) +{ + const int anno = rdoc.get_int(RDOC_ANNO); + const TString4 codnum = rdoc.get(RDOC_CODNUM); + const long ndoc = rdoc.get_long(RDOC_NDOC); + const TCodice_numerazione& num = cached_numerazione(codnum); + + TToken_string kdoc; + kdoc = rdoc.get(RDOC_PROVV); + kdoc.add(anno); + kdoc.add(codnum); + kdoc.add(ndoc); + const TRectype& doc = cache().get(LF_DOC, kdoc); + + TString16 numdoc; num.complete_num(ndoc, numdoc); + _numdoc.format("%d/%s/%s", anno, (const char*)codnum, (const char*)numdoc); + _datadoc = doc.get_date(DOC_DATADOC); +} + + +///////////////////////////////////////////////////////////////////////////////////// +// TPaf_record +///////////////////////////////////////////////////////////////////////////////////// + +// Contenitore di campi di un record di database SQLite +class TPaf_record : public TObject +{ + TString8 _table; + TToken_string _key; + TAssoc_array _fields; + +protected: + void copy(const TPaf_record& rec) { _table = rec._table; _key = rec._key; _fields = rec._fields; } + const TString& var2str(const TString& fld, const TVariant& var) const; + +public: + void reset() { _fields.destroy(); } + void set(const char* fld, const TVariant& var); + void set(const char* fld, long var); + void set(const char* fld, const char* var); + void set(const char* fld, const real& var); + void set(const char* fld, const TString& var); + void set(const char* fld, const TDate& var); + void set(const char* fld, bool var); + const TVariant& get(const char* fld) const; + + bool insert(); + bool remove(); + bool search(); + bool search(const char* k1, const char* k2, const char* k3 = NULL); + + virtual TObject* dup() const { return new TPaf_record(*this); } + virtual bool ok() const { return _table.not_empty(); } + + TPaf_record& operator=(const TPaf_record& rec) { copy(rec); return *this; } + TPaf_record(const TPaf_record& rec) { copy(rec); } + TPaf_record(const char* table); +}; + +// Imposta il valore di un campo variant +void TPaf_record::set(const char* fld, const TVariant& var) +{ + CHECK(fld && *fld, "Null field name"); + + if (var.is_null()) + { + _fields.remove(fld); + } + else + { + TVariant* obj = (TVariant*)_fields.objptr(fld); + if (obj != NULL) + *obj = var; + else + _fields.add(fld, new TVariant(var)); + } +} + +// Imposta il valore di un campo intero +void TPaf_record::set(const char* fld, long val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo stringa +void TPaf_record::set(const char* fld, const char* val) +{ + if (val == NULL) + set(fld, NULL_VARIANT); + else + { + const TVariant var(val); + set(fld, var); + } +} + +// Imposta il valore di un campo stringa +void TPaf_record::set(const char* fld, const TString& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo numerico +void TPaf_record::set(const char* fld, const real& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo data in formato ISO +void TPaf_record::set(const char* fld, const TDate& val) +{ + if (val.ok()) + { + const TVariant var(val); + set(fld, var); + } + else + set(fld, ""); +} + +// Imposta il valore di un campo booleano +void TPaf_record::set(const char* fld, bool var) +{ + set(fld, var ? "SI" : "NO"); +} + +// Legge il valore di un campo variant +const TVariant& TPaf_record::get(const char* fld) const +{ + const TVariant* var = (const TVariant*)_fields.objptr(fld); + return var ? *var : NULL_VARIANT; +} + +// Converte un variant in una stringa valida per SQLite +const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) const +{ + const TFieldtypes vt = var.type(); + if (vt == _realfld) + { + const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ")>0 || fldname.find("PREZZO")>0); + TString& tmp = get_tmp_string(); + tmp << '\'' << v.string() << '\''; tmp.replace(',', '.'); + return tmp; + } + if (vt == _datefld) + { + TString& tmp = get_tmp_string(); + tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\''; + return tmp; + } + + const TString& str = var.as_string(); + + bool apici = vt == _alfafld; + if (apici && str[0] != '0' && real::is_natural(str)) + apici = false; + + if (!apici) + return str; + + TString& tmp = get_tmp_string(); + tmp = str; + for (int a = str.rfind('\''); a >= 0; a--) + { + if (tmp[a] == '\'') + tmp.insert("'", a); + } + tmp.insert("'", 0); + tmp << '\''; + return tmp; +} + +// Elimina il record in base ai campi chiave +bool TPaf_record::remove() +{ + TString256 query; + query << "DELETE FROM " << _table << " WHERE "; + int nkf = 0; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + if (nkf++ > 0) + query << " AND "; + query << fld << '=' << var2str(fld, var); + } + } + CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table); + query << ';'; + return db().sq_set_exec(query); +} + +// Callback per la sottostante funzione search() +static int paf_search_record(void* jolly, int cols, char** values, char** names) +{ + TPaf_record& rec = *(TPaf_record*)jolly; + for (int i = 0; i < cols; i++) + rec.set(names[i], values[i]); + return 0; +} + +// Carica un record in base ai campi chiave +bool TPaf_record::search() +{ + CHECKS(_fields.items() >= _key.items(), "Can't search partial key on table ", _table); + TString256 query; + query << "SELECT * FROM " << _table << " WHERE "; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + query << fld << '=' << var2str(fld, var) << " AND "; + } + query.rtrim(5); + query << ';'; + // TODO: Da controllare + // return xvt_sql_execute(_db, query, paf_search_record, this) == 1; + return db().sq_set_exec(query); +} + +// Carica un record in base ad un massimo di 3 campi chiave +bool TPaf_record::search(const char* k1, const char* k2, const char* k3) +{ + _fields.destroy(); + + set(_key.get(0), k1); + set(_key.get(1), k2); + if (k3 && *k3) + set(_key.get(2), k3); + + return search(); +} + +// Aggiunge un record al db +bool TPaf_record::insert() +{ + CHECKS(_fields.items() > _key.items(), "Can't insert empty record on table ", _table); + + TString query, values; + query << "INSERT INTO " << _table << "\n("; + FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + query << fld << ','; + values << var2str(fld, var) << ','; + } + } + query.rtrim(1); values.rtrim(1); + query << ")\nVALUES (" << values << ");"; + //return xvt_sql_execute(_db, query, NULL, 0L) == 1; + return db().sq_set_exec(query); +} + +// Crea un record della tabella data ed imposta i nomi dei campi chiave +TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',') +{ + _key = ini_get_string("./paf.ini", table, "INDEX_1"); + if (_key.empty()) + { + // Cerco di costruire i nomi della chiave cercando la K, come in P1_KEYHEADERFATT + TConfig cfg("paf.ini", table); + TAssoc_array& fields = cfg.list_variables(); + FOR_EACH_ASSOC_STRING(fields, obj, key, str) + { + if (key[3] == 'K') + _key.add(key); + } + } + CHECKS(!_key.empty_items(), "Invalid primary key for table ", table); +} + +///////////////////////////////////////////////////////////////////////////////////// +// TPa_mask +///////////////////////////////////////////////////////////////////////////////////// + +class TPA_mask : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + + void fill(); + void init(); + bool is_fattura(const TRectype& doc) const; + +public: + TPA_mask() : TAutomask("pa0100a") { } +}; + +bool TPA_mask::is_fattura(const TRectype& doc) const +{ + const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); + if (!td.is_fattura()) // Tengo per buone solo le fatture e le note di credito + return false; + + const TCodice_numerazione& cn = cached_numerazione(doc.get(DOC_CODNUM)); + return cn.tipo() == 2 && !cn.get_bool("B10"); // Controlla se fattura provvisioria esclusa da P.A. +} + + +void TPA_mask::fill() +{ + TSheet_field& docs = sfield(F_DOCS); + TString_array& sht = docs.rows_array(); + docs.hide(); + + sht.destroy(); + + // Seleziona tutti i clienti che sono pubbliche amministrazioni (PADESTIN!='') + TString query; + query << "USE 17 SELECT PADESTIN!=''" + << "\nJOIN 20 INTO TIPOCF=TIPOCF CODCF==CODCF" + << "\nFROM TIPOCF=C\nTO TIPOCF=C"; + + TISAM_recordset clifo_pa(query); + const TRecnotype n = clifo_pa.items(); + if (n > 0) + { + const TDate dal = get(F_DATAINI); + const bool hide_processed = !get_bool(F_SHOWALL); + + // Record di controllo per eventuali elaborazioni precedenti + TString hfatt(8), bfatt(20); + TPaf_record paf0100f("PAF0100F"); + + TProgress_monitor pi(n, NULL); + for (bool okc = clifo_pa.move_first(); okc; okc = clifo_pa.move_next()) + { + if (!pi.add_status()) + break; + + query.cut(0); + query << "USE 33 KEY 2\nSELECT (BETWEEN(STATO,2,8))"; + query << "\nFROM TIPOCF=C CODCF=#CLIENTE PROVV=D ANNO=" << dal.year() << " DATADOC=" << dal.date2ansi() + << "\nTO TIPOCF=C CODCF=#CLIENTE PROVV=D"; + TISAM_recordset doc_pa(query); + doc_pa.set_var("#CLIENTE", clifo_pa.get(CLI_CODCF)); + const TRectype& doc = doc_pa.cursor()->curr(); + for (bool okd = doc_pa.move_first(); okd; okd = doc_pa.move_next()) + { + const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); + if (!td.is_fattura()) // Tengo per buone solo le fatture e le note di credito + continue; + + bool sent = false; + if (chiave_paf(doc, hfatt, bfatt)) + { + if (paf0100f.search(hfatt, bfatt)) + { + sent = paf0100f.get("P1_GESTIONE").as_string() == "X"; + if (sent && hide_processed) + continue; + } + } + TToken_string* row = new TToken_string; + *row = sent ? " " : "X"; + row->add(doc_pa.get(DOC_ANNO).as_int(), 1); + row->add(doc_pa.get(DOC_CODNUM).as_string()); + row->add(doc_pa.get(DOC_NDOC).as_int()); + row->add(doc_pa.get(DOC_DATADOC).as_date()); + row->add(clifo_pa.get(CFV_CODCF).as_int()); + row->add(clifo_pa.get("20." CLI_RAGSOC).as_string()); + row->add(clifo_pa.get(CFV_PADESTIN).as_string()); + row->add(clifo_pa.get(CFV_PARIFAMM).as_string()); + row->add(clifo_pa.get("20." CLI_COFI).as_string()); + + bool split = clifo_pa.get("20." CLI_SPLITPAY).as_bool(); + if (split) + { + const long numreg = doc_pa.get(DOC_NUMREG).as_int(); + if (numreg > 0) + { + const TRectype& mov = cache().get(LF_MOV, numreg); + split = is_split_payment(mov); + } + } + row->add(split ? "X" : " "); + + const bool attach = !doc_pa.get("COLL_GOLEM").is_empty(); + row->add(attach ? "X" : " "); + + sht.add(row); + } + } + } + docs.force_update(); + docs.show(); +} + +bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_DATAINI: + if (e == fe_init) + o.set(ini_get_string(CONFIG_DITTA, "pa", "LastXML", "31-03-2015")); else + if (e == fe_modify) + fill(); else + if (e == fe_close) + ini_set_string(CONFIG_DITTA, "pa", "LastXML", o.get()); + break; + case F_SHOWALL: + if (e == fe_modify) + fill(); + break; + case F_DOCS: + if (e == fe_init) + fill(); + if (e == se_query_add || e == se_query_del) + return false; + break; + case DLG_USER: + if (e == fe_button && jolly > 0) + { + TSheet_field& docs = sfield(F_DOCS); + TToken_string& row = docs.row(docs.selected()); + TRectype doc(LF_DOC); + doc.put(DOC_PROVV, 'D'); + doc.put(DOC_ANNO, row.get(1)); + doc.put(DOC_CODNUM, row.get()); + doc.put(DOC_NDOC, row.get()); + if (doc.edit()) + fill(); + } + break; + case DLG_ALL: + { + if (e == fe_button) + { + TSheet_field& docs = sfield(F_DOCS); + TString_array& sht = docs.rows_array(); + const int items = sht.items(); + + if (items > 0) + { + const TString4 select = *(sht.row(0).get(0)) == 'X' ? "" : "X"; + for (int i = 0; i < items; i++) + sht.row(i).add(select, 0); + docs.force_update(); + } + } + } + break; + default: break; + } + return true; +} + +///////////////////////////////////////////////////////////////////////////////////// +// TDoc2Paf +///////////////////////////////////////////////////////////////////////////////////// + +class TDoc2Paf : public TSkeleton_application +{ + TAnagrafica _ditta; + TString16 _cofi; + TFilename _dbname; + TLog_report* _log; + TString _logpaf; + +private: + int parse_line(const TString& line, TString& var, TString& val) const; + bool create_table(TScanner& paf, const TString& table); + + const TRectype* find_parent_row(const TRectype& rdoc) const; + int find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const; + +protected: + bool parse_sconto(const TString& formula, TToken_string& sconti) const; + bool get_bnp_iban(const TString& abi, const TString& cab, int prg, TString& iban) const; + bool get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const; + const char* descrizione(const TRiga_documento& rdoc) const; + const TRectype& cco(const TRectype& doc) const; // Contratto/Convenzione/Offerta + + void log(int severity, const char* msg); + bool show_log(); + const char * natura(const TString& codiva) const; + void set_IVA(const TString& codiva, TPaf_record& paf) const; + void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const; + + bool elabora(TDocumentoEsteso& doc); + bool elabora(const TRectype& rec); + bool elabora(const TDoc_key& key); + bool elabora(const TFilename& ini); + bool genera_xml(); + +public: + virtual bool create(); + virtual bool destroy(); + virtual void main_loop(); + + TDoc2Paf() : _log(NULL) {} +}; + +bool TDoc2Paf::parse_sconto(const TString& formula, TToken_string& sconti) const +{ + sconti.cut(0); + int start = 0; + for (int i = 0; ; i++) + { + const char c = formula[i]; + if (c == '+' || c == '-' || c < ' ') + { + if (i > 0) + { + TString8 tok = formula.sub(start, i); + tok.replace(',', '.'); + const real perc = tok; + if (!perc.is_zero()) + sconti.add(tok); + } + if (c < ' ') + break; + start = i; + } + } + return sconti.full(); +} + +bool TDoc2Paf::get_bnp_iban(const TString& abi, const TString& cab, int nprog, TString& iban) const +{ + TTable bnp("BNP"); + TString16 key; + key << abi << cab; + if (nprog > 0) + { + TString4 sprog; sprog.format("%02d", nprog); + key << sprog; + } + bnp.put("CODTAB", key); + int err = bnp.read(_isgteq); + if (err == NOERR && !bnp.get("CODTAB").starts_with(abi)) + err = _iskeynotfound; + if (err == NOERR) + iban = bnp.get("S3"); + + return err == NOERR; +} + +bool TDoc2Paf::get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const +{ + bool found = false; + abi = doc.get(DOC_CODABIP); + cab = doc.get(DOC_CODCABP); + int prg = doc.get_int(DOC_PROGBNP); + + found = abi.full() && cab.full(); + if (found) + get_bnp_iban(abi, cab, prg, iban); + + if (!found) // Se non trovo banca sul DOC la cerco su CFBAN + { + TToken_string key; + key.add("C"); key.add(doc.codcf()); key.add("N"); key.add(1); + const TRectype& cfban = cache().get(LF_CFBAN, key); + if (!cfban.empty()) + { + abi = cfban.get(CFBAN_ABI); + cab = cfban.get(CFBAN_CAB); + prg = cfban.get_int(CFBAN_PROGPR); + found = abi.full() && cab.full(); + iban = cfban.get(CFBAN_IBAN); + if (found && iban.blank()) + get_bnp_iban(abi, cab, prg, iban); + } + } + + if (!found) // Se non trovo banca su CFBAN la cerco su CFVEN + { + const TRectype& cfven = doc.clifor().vendite(); + abi = cfven.get(CFV_CODABIPR); + cab = cfven.get(CFV_CODCABPR); + found = abi.full() && cab.full(); + if (found) + get_bnp_iban(abi, cab, 0, iban); + } + + if (found) + istituto = cache().get("%BAN", abi, "S0"); + + return found; +} + +const char* TDoc2Paf::descrizione(const TRiga_documento& rdoc) const +{ + if (rdoc.get_bool(RDOC_DESCLUNGA)) + { + TString tmp; + tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST); + tmp.replace('\n', ' '); tmp.strip_double_spaces(); tmp.trim(); + TParagraph_string para(tmp, 100); + return para.get(0); + } + return rdoc.get(RDOC_DESCR); +} + +const TRectype* TDoc2Paf::find_parent_row(const TRectype& rdoc) const +{ + const long id = rdoc.get_long(RDOC_DAIDRIGA); + if (id > 0L) + { + TToken_string key; + key.add(rdoc.get(RDOC_DACODNUM)); + if (key.full()) + { + key.add(rdoc.get(RDOC_DAANNO)); + key.add(rdoc.get(RDOC_DAPROVV)); + key.add(rdoc.get(RDOC_DANDOC)); + for (int r = 0; ; r++) + { + if (r == 0) + key.add(id, 4); + else + key.add(r, 4); + const TRectype& rec = cache().get(LF_RIGHEDOC, key); + if (r > 0 && rec.empty()) + break; + if (rec.get_long(RDOC_IDRIGA) == id) + return &rec; + } + } + } + return NULL; +} + +int TDoc2Paf::find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const +{ + if (rdoc.is_articolo()) + { + for (const TRectype* prdoc = find_parent_row(rdoc); prdoc != NULL; prdoc = find_parent_row(*prdoc)) + { + const TCodice_numerazione& cn = cached_numerazione(prdoc->get(RDOC_CODNUM)); + const int td = cn.tipo(); + if (td > 0 && ancestors.objptr(td) == NULL) + ancestors.add(new TAncestor(*prdoc), td); + } + } + return ancestors.items(); +} + +const TRectype& TDoc2Paf::cco(const TRectype& doc) const +{ + TString80 conkey; + const TString& con = doc.get(DOC_CONTRATTO); + if (con.full()) + { + char tcon = doc.get_char(DOC_MODPAG); + if (tcon < 'C') tcon = 'C'; + conkey.format("%c%6ld%s", tcon, doc.get_long(DOC_CODCF), (const char*)con); + } + return cache().get("&CON", conkey); +} + +void TDoc2Paf::log(int severity, const char* msg) +{ + if (severity < 0) + { + _logpaf = msg; + } + else + if (_log == NULL) + { + _log = new TLog_report; + if (_logpaf.full()) + { + TString txt; + txt << _logpaf << ": " << msg; + _log->log(severity, txt); + } + else + _log->log(severity, msg); + } +} + +bool TDoc2Paf::show_log() +{ + bool ok = true; + if (_log) + { + _log->preview(); + delete _log; + _log = NULL; + ok = noyes_box(TR("Si desidera procedere con la generazione file xml?")); + } + return ok; +} + + +const char * TDoc2Paf::natura(const TString& codiva) const +{ + const TRectype& ai = cache().get("%IVA", codiva); + TString & natura = get_tmp_string(4); + + natura = ai.get("S12"); + if (natura.blank()) + { + const int tipo_iva11 = ai.get_int("S2"); + const bool revcharge = tipo_iva11 >= 31 && tipo_iva11 <= 38; + const TString& tipo = ai.get("S1"); + const int tipo_vendite = ai.get_int("S7"); + + // N1 escluse ex art 15 + if (tipo_vendite == 5) + natura = "N5"; // regime del margine + else + if (revcharge) + natura = "N6"; // Inversione contabile (REVERSE CHARGE) + else + if (tipo == "NS") + natura = "N2"; // Non soggetto + else + if (tipo == "NI") + natura = "N3"; // Non imponibile + else + if (tipo == "ES") + natura = "N4"; // Esente + } + return natura; +} + +void TDoc2Paf::set_IVA(const TString& codiva, TPaf_record& paf) const +{ + const TRectype& ai = cache().get("%IVA", codiva); + const real aliquota = ai.get("R0"); + paf.set("PI_ALIQUOTAIVA", aliquota); + if (codiva.full()) + { + if (aliquota.is_zero()) + paf.set("PI_NATURA", natura(codiva)); + else + paf.set("PI_NATURA", ""); + } +} + +void TDoc2Paf::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const +{ + const TString8 codiva(rdoc.get(RDOC_CODIVA)); + const TRectype& ai = cache().get("%IVA", codiva); + const real aliquota = ai.get("R0"); + paf.set("PI_ALIQUOTAIVA", aliquota); + if (codiva.full()) + { + if (aliquota.is_zero()) + paf.set("PI_NATURA", natura(codiva)); + else + paf.set("PI_NATURA", ""); + } +} + + +bool TDoc2Paf::elabora(TDocumentoEsteso& doc) +{ + TString8 hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. + TString20 bfatt; // Codice univoco di 20 caratteri del documento + if (!chiave_paf(doc, hfatt, bfatt)) + return false; + log(-1, bfatt); + + const TFirm& firm = prefix().firm(); + const char* const paese = "IT"; + TCausale caus = TCausale(doc.tipo().causale(), doc.anno()); + + // + TPaf_record paf0100f("PAF0100F"); + paf0100f.set("P1_KEYHEADERFATT", hfatt); + paf0100f.set("P1_KEYBODYFATT", bfatt); + paf0100f.remove(); + + paf0100f.set("P1_TRASMITTPAESE", paese); + paf0100f.set("P1_TRASMITTCOD", _cofi); + paf0100f.set("P1_PRGINVIO", ""); // Ci pensa SiAggPA + paf0100f.set("P1_FMTTRASMISS", "SDI11"); // SDI11 si usa dal 2015 per lo split payment (prima era SDI10) + + paf0100f.set("P1_CODDEST", hfatt); + TString80 tel; tel << firm.get(NDT_PTEL) << firm.get(NDT_TEL); + paf0100f.set("P1_TELEFONO", tel); + paf0100f.set("P1_MAIL", firm.get(NDT_MAIL)); + paf0100f.set("P1_GESTIONE", "D"); + paf0100f.insert(); + // + + // + TPaf_record paf0200f("PAF0200F"); + paf0200f.set("P2_KEYHEADERFATT", hfatt); + paf0200f.set("P2_KEYBODYFATT", bfatt); + paf0200f.remove(); + + if (_ditta.partita_IVA().full()) + { + paf0200f.set("P2_FISCIVAPAESE", paese); // Sempre IT + paf0200f.set("P2_FISCIVACOD", _ditta.partita_IVA()); + } + paf0200f.set("P2_CODFISCALE", _ditta.codice_fiscale()); + if (_ditta.fisica()) + { + paf0200f.set("P2_ANANOME", _ditta.nome()); + paf0200f.set("P2_ANACOGNOME", _ditta.cognome()); + } + else + { + paf0200f.set("P2_ANADENOMIN", _ditta.ragione_sociale()); + } + + const char* regime_fiscale = "RF01"; + if (doc.get_bool(DOC_IVAXCASSA)) + { + // Supponiamo volume d'affari > 200000, altrimenti sarebbe RF17 + regime_fiscale = "RF16"; + } + paf0200f.set("P2_REGFISCALE", regime_fiscale); + + // DatiSede + paf0200f.set("P2_SEDEIND", _ditta.via_residenza()); + paf0200f.set("P2_SEDENRCIVICO", _ditta.civico_residenza()); + paf0200f.set("P2_SEDECAP", _ditta.CAP_residenza()); + paf0200f.set("P2_SEDECOMUNE", _ditta.comune_residenza()); + paf0200f.set("P2_SEDEPROV", _ditta.provincia_residenza()); + paf0200f.set("P2_SEDENAZ", paese); + paf0200f.set("P2_GESTIONE", "D"); + + TAnagrafica cliente(doc.clifor()); + + TString rifamm = cco(doc).get("S4"); + if (rifamm.blank()) + rifamm = doc.clifor().vendite().get(CFV_PARIFAMM); + paf0200f.set("P2_RIFAMMINISTR", rifamm); + + TISAM_recordset unloc("USE UNLOC\nJOIN COMUNI INTO COM==COMCCIAA\nFROM CODDITTA=#DITTA\nTO CODDITTA=#DITTA"); + unloc.set_var("#DITTA", firm.get(NDT_CODDITTA)); + if (unloc.move_first()) + { + const TString& numrea = unloc.get(ULC_NUMCCIAA).as_string(); + if (numrea.full()) + { + paf0200f.set("P2_ISCRREANUM", numrea); + paf0200f.set("P2_ISCRREAUFF", unloc.get("13->" COM_PROVCOM)); + } + } + + if (_ditta.giuridica()) + { + TISAM_recordset anagiu("USE ANAGIU\nFROM CODANAGR=#CODICE\nTO CODANAGR=#CODICE"); + anagiu.set_var("#CODICE", firm.get(NDT_CODANAGR)); + if (anagiu.move_first()) + { + paf0200f.set("P2_ISCRREACAP", anagiu.get(ANG_CAPSOC)); + const int ss = anagiu.get(ANG_STATOSOC).as_int(); + paf0200f.set("P2_ISCRREASLIQUID", (ss == 2 || ss == 3) ? "LS" : "LN"); + } + } + else + paf0200f.set("P2_ISCRREASLIQUID", "LN"); + + paf0200f.insert(); + + // + + // + + TPaf_record paf0400f("PAF0400F"); + paf0400f.set("P4_KEYHEADERFATT", hfatt); + paf0400f.set("P4_KEYBODYFATT", bfatt); + paf0400f.remove(); + + if (cliente.partita_IVA().full()) + { + paf0400f.set("P4_FISCIVAPAESE", paese); + paf0400f.set("P4_FISCIVACOD", cliente.partita_IVA()); + } + paf0400f.set("P4_CODFISC", cliente.codice_fiscale()); + + if (cliente.fisica()) + { + paf0400f.set("P4_ANANOME", cliente.nome()); + paf0400f.set("P4_ANACOGNOME", cliente.cognome()); + } + else + { + paf0400f.set("P4_ANADENOM", cliente.ragione_sociale()); + } + + // DatiSede + paf0400f.set("P4_SEDEIND", cliente.via_residenza()); + paf0400f.set("P4_SEDENRCIVICO", cliente.civico_residenza()); + paf0400f.set("P4_SEDECAP", cliente.CAP_residenza()); + paf0400f.set("P4_SEDECOMUNE", cliente.comune_residenza()); + paf0400f.set("P4_SEDEPROV", cliente.provincia_residenza()); + paf0400f.set("P4_SEDENAZ", "IT"); + paf0400f.set("P4_GESTIONE", "D"); + paf0400f.insert(); + // + + // + TPaf_record paf0700f("PAF0700F"); + paf0700f.set("P7_KEYHEADERFATT", hfatt); + paf0700f.set("P7_KEYBODYFATT", bfatt); + paf0700f.remove(); + paf0700f.set("P7_TIPODOC", doc.is_nota_credito() ? "TD04" : "TD01"); + paf0700f.set("P7_DIVISA", "EUR"); // Aggiungere codice ISO 4217 a tabella divise (%VAL) + paf0700f.set("P7_DATA", doc.data()); + + const TCodice_numerazione& codnum = doc.codice_numerazione(); + TString20 numdoc; codnum.complete_num(doc.numero(), numdoc); + paf0700f.set("P7_NUMERO", numdoc); + paf0700f.set("P7_GESTIONE", "D"); + paf0700f.insert(); + + // + TPaf_record paf0900f("PAF0900F"); + paf0900f.set("P9_KEYHEADERFATT", hfatt); + paf0900f.set("P9_KEYBODYFATT", bfatt); + paf0900f.remove(); + + TString80 sconto_expr = doc.get(DOC_SCONTOPERC); + TToken_string sconti; + if (parse_sconto(sconto_expr, sconti)) + { + long nlin_sconto = 0; + FOR_EACH_TOKEN(sconti, str) + { + const real sconto = str; + if (!sconto.is_zero()) // Precauzione inutile + { + paf0900f.set("P9_RIFNUMLINEA", ++nlin_sconto); + if (sconto > ZERO) + { + paf0900f.set("P9_TIPOSCONTO", "SC"); + paf0900f.set("P9_PERCSCONTO", sconto); + } + else + { + paf0900f.set("P9_TIPOSCONTO", "MG"); + paf0900f.set("P9_PERCSCONTO", -sconto); + } + paf0900f.set("P9_GESTIONE", "D"); + paf0900f.insert(); + } + } + } + // + + // + TPaf_record paf2700f("PAF2700F"); + paf2700f.set("PQ_KEYHEADERFATT", hfatt); + paf2700f.set("PQ_KEYBODYFATT", bfatt); + paf2700f.remove(); + paf2700f.set("PQ_IMPTOTDOC", doc.totale_doc()); + + const TRectype& cont_conv_off = cco(doc); + TString causale = cont_conv_off.get("S1"); + if (causale.full()) + { + causale << ' ' << cont_conv_off.get("S2"); + causale << ' ' << cont_conv_off.get("S3"); + causale.strip_double_spaces(); + causale.cut(200); + } + else + causale = doc.tipo().descrizione(); + paf2700f.set("PQ_CAUSALE", causale); + // paf2700f.set("PQ_ART73", true); + paf2700f.set("PQ_GESTIONE", "D"); + paf2700f.insert(); + // + + // Azzera contratti + TPaf_record paf1000f("PAF1000F"); + paf1000f.set("P0_KEYHEADERFATT", hfatt); + paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.remove(); + + // Azzera convenzioni + TPaf_record paf1100f("PAF1100F"); + paf1100f.set("PA_KEYHEADERFATT", hfatt); + paf1100f.set("PA_KEYBODYFATT", bfatt); + paf1100f.remove(); + + // Azzera ordini + TPaf_record paf1200f("PAF1200F"); + paf1200f.set("PB_KEYHEADERFATT", hfatt); + paf1200f.set("PB_KEYBODYFATT", bfatt); + paf1200f.remove(); + + // Azzera DDT + TPaf_record paf1600f("PAF1600F"); + paf1600f.set("PF_KEYHEADERFATT", hfatt); + paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.remove(); + + const TString16 cup = doc.get(DOC_CUP); + const TString16 cig = doc.get(DOC_CIG); + const TString80 com = doc.get(DOC_CODCMS); + + TString80 con = doc.get(DOC_CONTRATTO); + if (con.full() || cup.full() || cig.full()) + { + char tcon = doc.get_char(DOC_MODPAG); + if (tcon < 'C') tcon = 'C'; + + TDate datadoc; // Data contratto non obbligatoria + if (con.full()) + { + datadoc = cco(doc).get_date("D0"); + } + else + { + // IdDocumento obbligatorio + con = cig; + if (con.blank()) + con = cup; + } + + if (tcon == 'O') + { + paf1000f.set("P0_RIFNUMLINEA", 0L); + paf1000f.set("P0_IDDOC", con); + paf1000f.set("P0_DATADOC", datadoc); + paf1000f.set("P0_COMMCONVENZ", com); + paf1000f.set("P0_CODCUP", cup); + paf1000f.set("P0_CODCIG", cig); + paf1000f.set("P0_GESTIONE", "D"); + paf1000f.insert(); + } + else + if (tcon == 'C') + { + paf1100f.set("PA_RIFNUMLINEA", 0L); + paf1100f.set("PA_IDDOC", con); + paf1100f.set("PA_DATADOCU", datadoc); + paf1100f.set("PA_COMMCONVENZ", com); + paf1100f.set("PA_CODCUP", cup); + paf1100f.set("PA_CODCIG", cig); + paf1000f.set("PA_GESTIONE", "D"); + paf1100f.insert(); + } + else + { + paf1200f.set("PB_RIFNUMLINEA", 0L); + paf1200f.set("PB_IDDOC", con); + paf1200f.set("PB_DATADOCO", datadoc); + paf1200f.set("PB_COMMCONVENZ", com); + paf1200f.set("PB_CODCUP", cup); + paf1200f.set("PB_CODCIG", cig); + paf1200f.set("PB_GESTIONE", "D"); + paf1200f.insert(); + } + } + + if (cup.blank() && cig.blank()) + log(1, "CIG e CUP assenti"); + + // + + TPaf_record paf1800f("PAF1800F"); + paf1800f.set("PI_KEYHEADERFATT", hfatt); + paf1800f.set("PI_KEYBODYFATT", bfatt); + paf1800f.remove(); // Cancella tutte le righe documento + + TPaf_record paf2000f("PAF2000F"); + paf2000f.set("PJ_KEYHEADERFATT", hfatt); + paf2000f.set("PJ_KEYBODYFATT", bfatt); + paf2000f.remove(); // Cancella tutti gli sconti di riga + + long riga = 0; + TString16 codivadefault; + { + FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) + { + codivadefault = rdoc->get(RDOC_CODIVA); + if (codivadefault.full()) + break; + } + } + FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) + { + paf1800f.reset(); + paf1800f.set("PI_KEYHEADERFATT", hfatt); + paf1800f.set("PI_KEYBODYFATT", bfatt); + paf1800f.set("PI_NUMEROLINEA", ++riga); + paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc)); + // paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione + + + set_IVA(codivadefault, paf1800f); + + if (rdoc->is_merce()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + const real qta = rdoc->get(RDOC_QTA); + if (qta.is_zero()) + { + TString msg; msg.format("La riga merce %d ha quantità nulla", riga); + log(1, msg); + } + if (qta >= ZERO) + { + paf1800f.set("PI_QUANTITA", qta); + paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false)); + } + else + { + paf1800f.set("PI_QUANTITA", -qta); + paf1800f.set("PI_PREZZOUNIT", -rdoc->prezzo(true, false)); + } + paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false)); + set_IVA(*rdoc, paf1800f); + + /* + const TDate data = doc.get(DOC_DATADOC); + paf1800f.set("PI_DTINIZIOPER", data); + paf1800f.set("PI_DTFINEPER", data); + */ + + // + + sconto_expr = rdoc->get(RDOC_SCONTO); + if (parse_sconto(sconto_expr, sconti)) + { + long nlin_sconto = 0; + FOR_EACH_TOKEN(sconti, str) + { + const real perc = str; + if (!perc.is_zero()) + { + paf2000f.set("PJ_KEYNLINEA", (long)r); + paf2000f.set("PJ_KEYNPROGR", ++nlin_sconto); + if (perc > ZERO) + { + paf2000f.set("PJ_TIPOSCONTO", "SC"); + paf2000f.set("PJ_PERCSCONTO", perc); + } + else + { + paf2000f.set("PJ_TIPOSCONTO", "MG"); + paf2000f.set("PJ_PERCSCONTO", -perc); + } + paf2000f.set("PJ_GESTIONE", "D"); + paf2000f.insert(); + } + } + } + // + + TArray ancestors; find_ancestors(*rdoc, ancestors); + for (int i = ancestors.last(); i > 0; i = ancestors.pred(i)) + { + const TAncestor& a = (const TAncestor&)ancestors[i]; + if (i == 1) + { + TPaf_record paf1600f("PAF1600F"); + paf1600f.reset(); + paf1600f.set("PF_KEYHEADERFATT", hfatt); + paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.set("PF_RIFNUMLINEA", (long)r); + paf1600f.set("PF_NUMDDDT", a._numdoc); + paf1600f.set("PF_DATADDT", a._datadoc); + paf1600f.set("PF_GESTIONE", "D"); + paf1600f.insert(); + } + else + if (i == 3) + { + TPaf_record paf1000f("PAF1000F"); + paf1000f.set("P0_KEYHEADERFATT", hfatt); + paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.set("P0_RIFNUMLINEA", (long)r); + paf1000f.set("P0_IDDOC", a._numdoc); + paf1000f.set("P0_DATADOC", a._datadoc); + paf1000f.set("P0_COMMCONVENZ", com); + paf1000f.set("P0_CODCUP", cup); + paf1000f.set("P0_CODCIG", cig); + paf1000f.set("P0_GESTIONE", "D"); + paf1000f.insert(); + } + } + } + else + if (rdoc->is_spese()) + { + const TSpesa_prest& sp = rdoc->spesa(); + const real imp = rdoc->importo(true, false); + real qta = UNO; + if (sp.is_tipo()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + qta = rdoc->get_real(RDOC_QTA); + if (qta.is_zero()) + { + TString msg; msg.format("La riga spese a quantità %d ha quantità nulla (campo %s)", riga, (const char*)rdoc->field_qta()); + log(1, msg); + qta = UNO; + } + paf1800f.set("PI_QUANTITA", qta); + } + real prz = imp; + if (qta != UNO) + { + prz = rdoc->prezzo(true, false); + if (prz.is_zero() && !imp.is_zero()) + { + const TPrice price(imp / qta); + prz = price.get_value(); + } + } + paf1800f.set("PI_PREZZOUNIT", prz); + paf1800f.set("PI_PRZTOTALE", imp); + set_IVA(*rdoc, paf1800f); + } + else + if (rdoc->is_prestazione()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + real qta = rdoc->get(RDOC_QTA); if (qta.is_zero()) qta = UNO; + paf1800f.set("PI_QUANTITA", qta); + paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false)); + paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false)); + set_IVA(*rdoc, paf1800f); + } + + paf1800f.set("PI_GESTIONE", "D"); + paf1800f.insert(); + } + // + + // + TPaf_record paf2200f("PAF2200F"); + paf2200f.set("PL_KEYHEADERFATT", hfatt); + paf2200f.set("PL_KEYBODYFATT", bfatt); + paf2200f.remove(); // Cancella tutte le righe di riepilogo IVA + + const char* eiva = "I"; // Esigibilità IVA: Immediata, Differita, Split payment + if (doc.is_split_payment()) + eiva = "S"; else + if (doc.get_bool(DOC_LIQDIFF) || doc.get_bool(DOC_IVAXCASSA)) + eiva = "D"; + + long num_riep = 0; + TAssoc_array& tiva = doc.tabella_iva(false); + FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm) + { + const TRiepilogo_iva& riva = *(const TRiepilogo_iva*)itm; + const real aliquota = riva.cod_iva().percentuale(); + paf2200f.set("PL_KEYNPROGR", ++num_riep); + paf2200f.set("PL_ALIQUOTAIVA", aliquota); + if (aliquota.is_zero()) + paf2200f.set("PL_NATURA", natura(riva.cod_iva().codice())); + + paf2200f.set("PL_IMPONIBILE", riva.imponibile()); + paf2200f.set("PL_IMPOSTA", riva.imposta()); + paf2200f.set("PL_ESIGIVA", eiva); + if (*eiva == 'S') + paf2200f.set("PL_RIFNORMATIVO", "Scissione pagamenti art.17-ter DPR 633/72"); + else + paf2200f.set("PL_RIFNORMATIVO", riva.cod_iva().descrizione()); + paf2200f.set("PL_GESTIONE", "D"); + paf2200f.insert(); + } + // + + // + TPaf_record paf2400f("PAF2400F"); + paf2400f.set("PN_KEYHEADERFATT", hfatt); + paf2400f.set("PN_KEYBODYFATT", bfatt); + paf2400f.remove(); // Cancella i dati pagamento + + TPagamento& pag = doc.pagamento(); + doc.scadenze_recalc(); // Ricalcola array delle rate + TString_array& scad = doc.scadenze(); + const int nrate = scad.items(); // Conta rate generate + const char* rateazione = nrate > 1 ? "TP01" : "TP02"; // A rate (TP01) o una soluzione(TP02)? + paf2400f.set("PN_CONDPAGAMENTO", rateazione); + paf2400f.set("PN_GESTIONE", "D"); + paf2400f.insert(); + + TPaf_record paf2500f("PAF2500F"); + paf2500f.set("PO_KEYHEADERFATT", hfatt); + paf2500f.set("PO_KEYBODYFATT", bfatt); + paf2500f.remove(); // Cancella tutte le rate + + // Imposto i campi uguali per tutte le rate + paf2500f.set("PO_CONDPAGAMENTO", rateazione); // Condizione di pagamento PA + paf2500f.set("PO_CODICEPAGAM", pag.code()); // Condizione di pagamento CAMPO + + TString80 iban, istituto; + TString8 abi, cab; + if (get_bank(doc, iban, abi, cab, istituto)) + { + paf2500f.set("PO_ISTFINANZ", istituto); + paf2500f.set("PO_IBAN", iban); + paf2500f.set("PO_ABI", abi); + paf2500f.set("PO_CAB", cab); + } + + if (cab.blank()) + log(2, TR("Non sono presenti ABI, CAB, IBAN per il pagamento")); else + if (iban.blank()) + log(1, TR("Non è presente il codice IBAN per il pagamento")); + + for (int nr = 0; nr < nrate; nr++) + { + paf2500f.set("PO_KEYNPROGR", long(nr + 1)); // Numero rata + + const char* mod_pag = "MP01"; // Modalità di pagamento + const int n = nr < pag.n_rate() ? nr : 0; // Si assicura che il numero riga sia accettabile + switch (pag.tipo_rata(n)) + { + case _bonfico: mod_pag = "MP05"; break; // bonifico + case _rid: mod_pag = "MP09"; break; // RID + case _ric_ban: mod_pag = "MP12"; break; // RIBA + default: mod_pag = "MP01"; break; // contanti + } + paf2500f.set("PO_MODALITAPAGAM", mod_pag); + + TToken_string& riga = scad.row(nr); // Data|Importo + paf2500f.set("PO_DATASCADENZA", TDate(riga.get(0))); // Data scadenza + paf2500f.set("PO_IMPORTO", real(riga.get())); // Importo rata + + paf2500f.set("PO_GESTIONE", "D"); + paf2500f.insert(); + } + + TPaf_record paf2600f("PAF2600F"); + paf2600f.set("PP_KEYHEADERFATT", hfatt); + paf2600f.set("PP_KEYBODYFATT", bfatt); + paf2600f.remove(); // Cancella eventuali allegati + TToken_string allegati(doc.get("COLL_GOLEM"), '\n'); + if (allegati.full()) + { + long nprogr = 0; // Numero di file allegati + TFilename fname; + FOR_EACH_TOKEN(allegati, row) + { + const TToken_string entry(row); + if (entry.get(0, fname) && fname.exist()) + { + paf2600f.set("PP_KEYNPROGR", ++nprogr); + paf2600f.set("PP_NOMEATTACHMENT", fname.name()); + paf2600f.set("PP_ATTACHMENT", fname); + fname.upper(); // serve estensione maiuscola + paf2600f.set("PP_FMTATTACHMENT", fname.ext()); + paf2600f.insert(); + } + } + } + + // + + return true; +} + +bool TDoc2Paf::elabora(const TRectype& rec) +{ + bool done = false; + TDocumentoEsteso doc; + if (doc.read(rec) == NOERR) + { + // TODO: Da controllare + // xvt_sql_begin(_db); + done = elabora(doc); + if (done) + done = db().sq_commit(); + else + db().sq_rollback(); + } + return done; +} + +bool TDoc2Paf::elabora(const TDoc_key& key) +{ + TRectype rec(LF_DOC); + rec.put(DOC_PROVV, key.provv()); + rec.put(DOC_ANNO, key.anno()); + rec.put(DOC_CODNUM, key.codnum()); + rec.put(DOC_NDOC, key.ndoc()); + return elabora(rec); +} + +bool TDoc2Paf::elabora(const TFilename& ini) +{ + TConfig cfg(ini, "33"); + const int anno = cfg.get_int(DOC_ANNO); + const long ndoc = cfg.get_long(DOC_NDOC); + const TFixed_string codnum(cfg.get(DOC_CODNUM)); // lascio sapientemente per ultima la get di una stringa + const TDoc_key key(anno, codnum, ndoc); + return elabora(key); +} + + +bool TDoc2Paf::genera_xml() +{ +#define PABASE "SiaggPA" + + TFilename tmp; + + // Copia eventuali protezioni software + TString_array files; + if (list_files(PABASE"/*.ssa", files) == 0) + { + list_files("*.ssa", files); + FOR_EACH_ARRAY_ROW(files, i, row) + { + tmp = PABASE; tmp.add(*row); + xvt_fsys_fupdate(*row, tmp); + } + } + files.destroy(); + if (list_files(PABASE"/*.ssa", files) != 1) + warning_box(FR("Nella cartella %s deve essere presente esattamente un file .ssa"), PABASE); + + TFilename home; + xvt_sys_get_env("USERPROFILE", home.get_buffer(), home.size()); + home.add("SoftwareSirio"); home.add(PABASE); + if (!dexist(home)) + make_dir(home); + + tmp = home; tmp.add("config.properties"); + xvt_fsys_fupdate(PABASE"/config.properties", tmp); + + tmp = home; tmp.add("configGUI.properties"); + xvt_fsys_fupdate(PABASE"/configGUI.properties", tmp); + + if (tmp.exist()) + { + TJava_profile prop(tmp); + if (prop.get("percorso").blank()) + prop.set("percorso", _dbname.path()); + prop.set("nomePAF", _dbname); + } + else + cantread_box(tmp); + + tmp = PABASE"\\SiaggPACAMPO.jar"; + tmp.make_absolute_path(); + + DIRECTORY old_dir; xvt_fsys_get_dir(&old_dir); + DIRECTORY new_dir; xvt_fsys_convert_str_to_dir(tmp.path(), &new_dir); + xvt_fsys_set_dir(&new_dir); + const bool good = goto_url(tmp); + if (good) + xvt_sys_sleep(3000); + else + error_box(FR("Impossibile eseguire Java -jar %s"), (const char*)tmp); + xvt_fsys_set_dir(&old_dir); + + return good; +} + +void TDoc2Paf::main_loop() +{ + int ndocs = 0; + for (int a = 1; a < argc(); a++) + { + TFilename ini = argv(a); + if (ini.starts_with("-i", true) || ini.starts_with("/i", true)) + ini.ltrim(2); + if (ini.exist() && elabora(ini)) + ndocs++; + else + { + if (ini.find('*') >= 0 || ini.find('?') >= 0) + { + TString_array f; list_files(ini, f); + FOR_EACH_ARRAY_ROW(f, r, row) + { + ini = *row; + if (ini.exist() && elabora(ini)) + ndocs++; + } + } + } + } + if (ndocs > 0) + { + if (show_log()) + genera_xml(); + return; + } + + TPA_mask mask; + mask.set(F_COFI, _cofi); + while (mask.run() == K_ENTER) + { + _cofi = mask.get(F_COFI); + + TString_array& sht = mask.sfield(F_DOCS).rows_array(); + if (!sht.empty()) + { + TProgress_monitor pi(sht.items(), NULL); + ndocs = 0; + FOR_EACH_ARRAY_ROW(sht, r, riga) + { + if (riga->starts_with("X")) + { + const int anno = riga->get_int(1); + const long ndoc = riga->get_long(3); + const TFixed_string codnum(riga->get(2)); // lascio sapientemente per ultima la get di una stringa + const TDoc_key key(anno, codnum, ndoc); + if (elabora(key)) + ndocs++; + } + if (!pi.add_status(1)) + break; + } + message_box(FR("Sono stati elaborati %d documenti"), ndocs); + } + + if (ndocs > 0 && show_log()) + genera_xml(); + } +} + +int TDoc2Paf::parse_line(const TString& line, TString& var, TString& val) const +{ + if (line.blank()) + return 0; + + if (line[0] == '[') + { + var = line.mid(1); + var.rtrim(1); + val.cut(0); + return 1; + } + + const int equal = line.find('='); + if (equal < 6) + return 0; + var = line.left(equal); var.trim(); + val = line.mid(equal + 1); val.trim(); + return 2; +} + +bool TDoc2Paf::create_table(TScanner& paf, const TString& table) +{ + TString query, var, val; + if (xvt_sql_table_exists(_db, table)) + { + SLIST fields = xvt_sql_list_fields(_db, table); + while (!paf.eof()) + { + const TString& line = paf.line(); + const int n = parse_line(line, var, val); + if (n <= 0) + break; + if (var.starts_with("INDEX_")) + break; + if (xvt_slist_find_str(fields, var) == NULL) + { + query.cut(0) << "ALTER TABLE " << table << " ADD COLUMN " << var << ' ' << val << " NOT NULL"; + if (val.find("INT") >= 0 || val.find("NUM") >= 0) + query << " DEFAULT 0"; + else + query << " DEFAULT ''"; + query << ";"; + xvt_sql_execute(_db, query, NULL, NULL); // Create table + } + } + xvt_slist_destroy(fields); + } + else + { + query << "CREATE TABLE " << table << " ("; + while (!paf.eof()) + { + const TString& line = paf.line(); + const int n = parse_line(line, var, val); + if (n <= 0) + break; + if (n == 1) + { + paf.push(line); + break; + } + if (var.starts_with("INDEX_")) + { + query.rtrim(1); // toglie ultima , + query << ");"; + xvt_sql_execute(_db, query, NULL, NULL); // Create table + query.cut(0); + query << "CREATE UNIQUE INDEX " + << table << "_1 ON " << table + << " (" << val << ");"; + xvt_sql_execute(_db, query, NULL, NULL); // Create index + break; + } + else + { + query << "\n " << var << ' ' << val << " NOT NULL"; + if (val.find("INT") >= 0 || val.find("NUM") >= 0) + query << " DEFAULT 0"; + else + query << " DEFAULT ''"; + query << ","; + } + } + } + + return true; +} + +bool TDoc2Paf::create() +{ + open_files(LF_TAB, LF_TABCOM, LF_TABMOD, LF_ANAG, + LF_CLIFO, LF_CFVEN, LF_CFBAN, LF_NDITTE, + LF_DOC, LF_RIGHEDOC, 0); + + TRectype cfven(LF_CFVEN); + if (cfven.type(CFV_PARIFAMM) != _alfafld) + return error_box(TR("Database non convertito per fatturazione P.A.")); + + _ditta.init(LF_NDITTE, prefix().get_codditta()); + TString ad = ini_get_string(CONFIG_USER, "fp", "ip"); ad << "@" << ini_get_string(CONFIG_USER, "fp", "db"); + db().sq_connect( + ad, + ini_get_string(CONFIG_USER, "fp", "usr"), + decode(ini_get_string(CONFIG_USER, "fp", "psw")), + TSDB_MSSQL + ); + db().sq_set_autocommit(false); + if (db().sq_is_connect()) + return false; + + const TFilename ini = "paf.ini"; + bool ok = ini.exist(); + if (ok) + { + // TODO: Controllare begin + // xvt_sql_begin(_db); + TScanner paf(ini); + while (ok && !paf.eof()) + { + const TString& p = paf.line(); + if (p.starts_with("[PA") && p.ends_with("F]")) + { + TString16 table = p; table.strip("[]"); + ok = create_table(paf, table); + } + } + + if (ok) + { + TPaf_record panum("PANUM00F"); + panum.set("PJNKEY", "00001"); + if (!panum.search()) + { + panum.set("PJNINV", "0000000000"); + panum.insert(); + } + + db().sq_commit(); + } + else + db().sq_rollback(); + } + else + return cantread_box(ini); + + _cofi = ini_get_string(CONFIG_DITTA, "pa", "TRASMITTCOD"); + if (_cofi.blank()) + _cofi = _ditta.codice_fiscale(); + + return ok && TSkeleton_application::create(); +} + +bool TDoc2Paf::destroy() +{ + if (_cofi.full()) + ini_set_string(CONFIG_DITTA, "pa", "TRASMITTCOD", _cofi); + + return TSkeleton_application::destroy(); +} + +int fp0200(int argc, char* argv[]) +{ + //TFp_app t2t; + //t2t.run(argc, argv, TR("Trasferimento Fatture Elettroniche")); + return 0; +} \ No newline at end of file diff --git a/src/fp/fp0200a.h b/src/fp/fp0200a.h new file mode 100644 index 000000000..e69de29bb diff --git a/src/fp/fp0200a.uml b/src/fp/fp0200a.uml new file mode 100644 index 000000000..159424c4d --- /dev/null +++ b/src/fp/fp0200a.uml @@ -0,0 +1,467 @@ +#include "fp0200a.h" + +TOOLBAR "topbar" 0 0 0 2 +BUTTON DLG_RECALC 2 2 +BEGIN + PROMPT 1 1 "Carica" + PICTURE TOOL_CONVERT +END + +BUTTON DLG_ARCHIVE 2 2 +BEGIN + PROMPT 2 1 "Controlla" + PICTURE TOOL_SMILE +END + +BUTTON DLG_SAVEREC 2 2 +BEGIN + PROMPT 3 1 "Salva" + PICTURE TOOL_SAVEREC +END + +BUTTON DLG_EDIT 10 2 +BEGIN + PROMPT 3 1 "E~xcel" + PICTURE TOOL_EXCEL +END + +BUTTON DLG_OK 2 2 +BEGIN + PROMPT 1 1 "Esporta" + PICTURE TOOL_ELABORA +END + +BUTTON DLG_EMAIL 2 2 +BEGIN + PROMPT 1 1 "Crea XML" + PICTURE TOOL_EMAIL +END + +#include +ENDPAGE + +PAGE "Impostazioni" 0 2 0 0 + +DATE F_DATAINI +BEGIN + PROMPT 1 1 "Data iniziale:" + CHECKTYPE REQUIRED + VALIDATE DATE_CMP_FUNC <= F_DATAFIN + WARNING "La data iniziale non può essere maggiore della data finale" +END + +DATE F_DATAFIN +BEGIN + PROMPT 40 1 "Data Finale: " + CHECKTYPE REQUIRED + VALIDATE DATE_CMP_FUNC >= F_DATAINI + WARNING "La data finale non può essere minore della data iniziale" +END + +RADIOBUTTON F_TIPOCF 15 +BEGIN + PROMPT 1 2 "Tipo C/F" + ITEM "C|Cliente" + ITEM "F|Fornitore" +END + +NUMBER F_CODCF 6 +BEGIN + PROMPT 18 3 "Codice:" + USE LF_CLIFO + INPUT TIPOCF F_TIPOCF SELECT + INPUT CODCF F_CODCF + DISPLAY "Codice" CODCF + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Occasionale@C" OCCAS + DISPLAY "Codice Fiscale@16" COFI + DISPLAY "Partita IVA@15" PAIV + OUTPUT F_CODCF CODCF + OUTPUT F_RAGSOC RAGSOC + CHEKTYPE NORMAL + GROUP 1 + FLAGS "" +END + +STRING F_RAGSOC 50 49 +BEGIN + PROMPT 18 4 "R.Soc: " + USE LF_CLIFO KEY 2 + INPUT TIPOCF F_TIPOCF SELECT + INPUT RAGSOC F_RAGSOC + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Codice" CODCF + DISPLAY "Codice Fiscale@16" COFI + DISPLAY "Partita IVA@15" PAIV + COPY OUTPUT F_CODCF + ADD RUN CG0 -1 + GROUP 1 + FLAGS "" +END + + +RADIOBUTTON F_FATTSEL 25 +BEGIN + PROMPT 1 6 "Fatture da visualizzare" + ITEM "0|Da inviare" + ITEM "1|Inviate" + ITEM "2|Mai elaborati" + ITEM "3|Forzate" + ITEM "4|Errate" + ITEM "5|Disabilitate" + ITEM "6|Tutti" +END + +GROUPBOX DLG_NULL 65 5 +BEGIN + PROMPT 30 6 "Tipi documento selezionati" +END + +BOOLEAN B_TIPO_AUTOFATT +BEGIN + PROMPT 31 7 "Autofattura" + FLAGS "" +END +BOOLEAN B_TIPO_FATTACQ +BEGIN + PROMPT 45 7 "Fatt d'Acq" + FLAGS "" +END +BOOLEAN B_TIPO_FATTFISC +BEGIN + PROMPT 60 7 "Fatt Fisc" + FLAGS "" +END +BOOLEAN B_TIPO_FATTVEN +BEGIN + PROMPT 75 7 "Fatt Ven" + FLAGS "" +END + +BOOLEAN B_TIPO_FATTSCO +BEGIN + PROMPT 31 8 "Fatt Scontr" + FLAGS "" +END + +BOOLEAN B_TIPO_NOTC +BEGIN + PROMPT 45 8 "Nota Cred" + FLAGS "" +END +BOOLEAN B_TIPO_NOTD +BEGIN + PROMPT 60 8 "Nota Deb" + FLAGS "" +END +BOOLEAN B_TIPO_BOLLADOG +BEGIN + PROMPT 75 8 "Bolla Dog" + FLAGS "" +END +BOOLEAN B_TIPO_STORDOC +BEGIN + PROMPT 31 9 "Storno Doc" + FLAGS "" +END + +ENDPAGE + +PAGE "Trasferimento Fatture" 0 2 0 0 + +SPREADSHEET F_RIGHE +BEGIN + PROMPT 0 0 "Righe movimenti" + ITEM "Data\n Reg.@8F" + ITEM "Tipo\nDocum.@2F" + ITEM "Tipo\nDoc. AE.@5F" + ITEM "Numero\nDocum.@5F" + ITEM "Data\nDocum.@10" + ITEM "Aliquota@4" + ITEM "Imponibile@10" + ITEM "Imposta@10" + ITEM "Natura\nIVA@4" + ITEM "% Detr.@6" + ITEM "C/F@2" + ITEM "Codice@6" + ITEM "Occas.@16" + ITEM "Ragione Sociale@35" + ITEM "RF/SO@16" + ITEM "Rag. Soc. RF/SO@35" + ITEM "Partita IVA@11" + ITEM "Codice Fiscale@15" + ITEM "Rev.\nCharge@4" + ITEM "Auto\nfatt.@3" + ITEM "Spedita@5" + ITEM "Inviare@5" + ITEM "Modificata@10" + ITEM "N.\nRegistraz.@10" + ITEM "Codici Errori@10" + +END + +ENDPAGE + +ENDMASK + +PAGE "Riga" -1 -1 69 14 + +BOOLEAN A_SPEDITA +BEGIN + PROMPT 52 10 "Gia' spedita" + FIELD SPEDITA + FLAGS "D" +END + +LIST A_INVIO 1 15 +BEGIN + PROMPT 1 10 "Da inviare" + ITEM "X|X, Da Inviare" + ITEM "I|I, Inviato" + ITEM "N|N, Disabilitato" + ITEM "F|F, Forzato" + ITEM "E|E, Errato" + FIELD INVIO +END + +BOOLEAN A_FORZATA +BEGIN + PROMPT 30 10 "Forzatura manuale" + FIELD FORZATURA +END + +NUMBER A_NUMERO 10 +BEGIN + PROMPT 1 0 "N.Movimento" + FLAGS "D" + FIELD PROGR +END + +DATE A_DATAREG +BEGIN + PROMPT 26 0 "Data reg." + FIELD DATAREG + CHEKTYPE REQUIRED +END + +LIST A_TIPOCF 1 10 +BEGIN + PROMPT 1 1 "Tipo C/F " + ITEM "C|Cliente" + ITEM "F|Fornitore" + FIELD TIPOCF + FLAGS "D" +END + +NUMBER A_CODCF 6 +BEGIN + PROMPT 26 1 "Cod. C/F" + USE LF_CLIFO + INPUT TIPOCF A_TIPOCF SELECT + INPUT CODCF A_CODCF + DISPLAY "Codice" CODCF + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Occasionale@C" OCCAS + DISPLAY "Partita IVA" PAIV + DISPLAY "Codice fiscale@16" COFI + OUTPUT A_CODCF CODCF + OUTPUT A_RAGSOC RAGSOC + OUTPUT A_PAIV PAIV + OUTPUT A_COFI COFI + ADD RUN cg0 -1 + FIELD CODCF +END + +STRING A_OCFPI 16 +BEGIN + PROMPT 44 1 "Occas." + USE LF_OCCAS + INPUT CFPI A_OCFPI + DISPLAY "Codice@16" CFPI + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Partita IVA" PAIV + DISPLAY "Codice fiscale@16" COFI + OUTPUT A_OCFPI CFPI + OUTPUT A_RAGSOC RAGSOC + OUTPUT A_PAIV PAIV + OUTPUT A_COFI COFI + CHEKTYPE NORMAL + GROUP 3 + ADD RUN cg0 -6 + FIELD OCFPI +END + +STRING A_RAGSOC 50 47 +BEGIN + FIELD RAGSOC + PROMPT 1 2 "Ragione Sociale" + FLAGS "D" +END + +STRING A_RFSO 6 +BEGIN + FIELD RFSO + PROMPT 1 4 "Codice RF/SO: " + HELP "Codice Rappresentante Fiscale o Stabile Organizzazione" + FLAGS "D" +END + +STRING A_RAGSOCRFSO 50 47 +BEGIN + FIELD RAGSOCRFSO + PROMPT 1 5 "Rag. Soc. RF/SO" + HELP "Ragione Sociale RF/SO" + FLAGS "D" +END + +STRING A_TIPODOC 2 +BEGIN + PROMPT 23 6 "Tipo doc. " + FIELD TIPODOC + USE %TPD + INPUT CODTAB A_TIPODOC + DISPLAY "Tipo " CODTAB + DISPLAY "Descrizione @50" S0 + OUTPUT A_TIPODOC CODTAB + WARNING "Tipo documento errato" + CHECKTYPE REQUIRED + FLAGS "HUD" + ADD NONE +END + +LIST A_TIPODOCAE 6 +BEGIN + PROMPT 23 6 "Tipo doc. " + ITEM "TD01|TD01" + ITEM "TD04|TD04" + ITEM "TD05|TD05" + ITEM "TD07|TD07" + ITEM "TD08|TD08" + ITEM "TD10|TD10" + ITEM "TD11|TD11" + ITEM "ERR0|Errore" +END + +STRING A_NUMDOC 7 +BEGIN + PROMPT 42 6 "Num. doc. " + FLAGS "U" + FIELD NUMDOC + CHEKTYPE REQUIRED +END + +DATE A_DATADOC +BEGIN + PROMPT 1 6 "Data doc." + FIELD DATADOC + CHEKTYPE REQUIRED +END + +LIST A_NATURA 1 35 +BEGIN + PROMPT 20 7 "Natura IVA" + ITEM "|IVA ordinaria" + ITEM "N1|N1 - IVA esclusa ex art 15" + ITEM "N2|N2 - IVA non soggetta" + ITEM "N3|N3 - IVA non imponibile" + ITEM "N4|N4 - IVA esente" + ITEM "N5|N5 - IVA in regime del margine" + ITEM "N6|N6 - IVA in reverse charge" + ITEM "N7|N7 - IVA assolta in altro stato U3" +END + +STRING A_ALIQUOTA 4 +BEGIN + PROMPT 1 7 "Aliquota " + HELP "Codice aliquota" + FIELD CODTAB + KEY 1 + USE %IVA + FLAGS "U" + INPUT CODTAB A_ALIQUOTA + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Tipo" S1 + DISPLAY "%@5" R0 + DISPLAY "Vent." S6 + DISPLAY "Sospeso" B2 + OUTPUT A_ALIQUOTA CODTAB + CHECKTYPE REQUIRED + VALIDATE ZEROFILL_FUNC 2 +END + +STRING A_DETRAIB 6 +BEGIN + PROMPT 1 8 "% Detraibilita'" + HELP "Percentuale di detraibilita'" + FLAGS "D" +END + +NUMBER A_IMPONIBILE 12 2 +BEGIN + PROMPT 42 8 "Imponibile" +END + +NUMBER A_IMPOSTA 12 2 +BEGIN + PROMPT 42 9 "Imposta " +END + +BOOLEAN A_REVERSE +BEGIN + PROMPT 1 9 "Reverse charge" +END + +BOOLEAN A_AUTOFATT +BEGIN + PROMPT 25 9 "Autofattura" + FLAGS "D" +END + +STRING A_PAIV 12 +BEGIN + PROMPT 1 3 "Partita IVA " + FLAGS "D" +END + +STRING A_COFI 16 +BEGIN + PROMPT 33 3 "Codice Fiscale" + FLAGS "D" +END + +STRING A_CODERR 10 +BEGIN + PROMPT 0 13 "Codici errori" + //FLAGS "D" +END + +ENDPAGE + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_OK 2 2 +BEGIN + PROMPT 1 1 "" +END + +BUTTON DLG_USER 2 2 +BEGIN + PROMPT 2 1 "Collega" + PICTURE TOOL_LINK +END + +BUTTON DLG_DELREC 2 2 +BEGIN + PROMPT 2 1 "Elimina" + PICTURE TOOL_DELREC +END + +BUTTON DLG_CANCEL 2 2 +BEGIN + PROMPT 4 1 "" +END + +ENDPAGE + +ENDMASK \ No newline at end of file diff --git a/src/fp/fp0200b.h b/src/fp/fp0200b.h new file mode 100644 index 000000000..67694070f --- /dev/null +++ b/src/fp/fp0200b.h @@ -0,0 +1,308 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // dongle() +#include // Oracle Recset +#include +#include +#include // std::map + +#include "../ve/velib05.h" +#include "../cg/cglib03.h" +#include "../fe/felib.h" + +#include "fp0200a.h" +#include "../tf/tfutility.h" +#include + +#ifdef DISABLED +///////////////////////////////////////////////////////////////////////////////////// +// Globals +///////////////////////////////////////////////////////////////////////////////////// + +enum return_code +{ + found, // Trovato + foundcust, // Trovato in trasfatt + foundidcust,// Trovato ma con id customizzato + nextmov, // Trovato ma cambiato movimento + eof, // EOF rmoviva + eofcust, // EOF trasfatt + after // File mov su un movimento dopo rispetto a rmoviva +}; + +// Su DB: X o ''->Da inviare, F->Forzato, I->Inviato, N->Non inviare +enum filter_fatt +{ + toSend, // "", "X", "F", "E" + sent, // "I" + untouched, // "", "X" + forced, // "F" + disabled, // "N" + err, // "E" + all // Nessun controllo +}; + +#define SHEET_GAP 101 +#define DTE_PROVV "DTE0000001" +#define DTR_PROVV "DTR0000001" +#define TOLLARANZA 0.05 +// Flag invio +#define FLAG_INVIO "X" +#define FLAG_ERRORE "E" +#define FLAG_NINVIO "N" +#define FLAG_FORZATO "F" +#define FLAG_INVIATO "I" +#define SPESOMETROBASE "ModuliSirio" +#define REG_ATT 1 +#define REG_PAS 2 +#define CARATTERI_SPECIALI "àèéìòù°" + +/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza) + * per avere l'inserimento nello sheet corretto */ +enum spesometroFields{ + _spedita = A_SPEDITA - SHEET_GAP, + _invio = A_INVIO - SHEET_GAP, + _forzata = A_FORZATA - SHEET_GAP, + _numero = A_NUMERO - SHEET_GAP, + _datareg = A_DATAREG - SHEET_GAP, + _tipocf = A_TIPOCF - SHEET_GAP, + _codcf = A_CODCF - SHEET_GAP, + _occas = A_OCFPI - SHEET_GAP, + _ragsoc = A_RAGSOC - SHEET_GAP, + _rfso = A_RFSO - SHEET_GAP, + _ragsocrfso = A_RAGSOCRFSO - SHEET_GAP, + _codnum = A_TIPODOC - SHEET_GAP, + _codnumAE = A_TIPODOCAE - SHEET_GAP, + _numdoc = A_NUMDOC - SHEET_GAP, + _datadoc = A_DATADOC - SHEET_GAP, + _natura = A_NATURA - SHEET_GAP, + _aliquota = A_ALIQUOTA - SHEET_GAP, + _detraibile = A_DETRAIB - SHEET_GAP, + _imponibile = A_IMPONIBILE - SHEET_GAP, + _importoIVA = A_IMPOSTA - SHEET_GAP, // Imposta è già preso + _reverse = A_REVERSE - SHEET_GAP, + _autofatt = A_AUTOFATT - SHEET_GAP, + _paiv = A_PAIV - SHEET_GAP, + _codfis = A_COFI - SHEET_GAP, + _coderr = A_CODERR - SHEET_GAP +}; + +///////////////////////////////////////////////////////////////////////////////////// +// Utilities +///////////////////////////////////////////////////////////////////////////////////// + +// Da un id ritorna il tipo doc corrispondente +TString getTipoDoc(int id); +int getTipoDoc(TString id); + +// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h) +static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str); +// Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h) +bool xvt_fsys_fupdate(const char* src, const char* dst); +// Decodifica il tipo di documento per il trasferimento fatture +const char * decodTipo(TToken_string* strarr); +// Salvo un singolo record +//bool saveRec(TToken_string row, bool esportato = false); +// Ritorno una data in formato ANSI +inline TDate toDate(const char * date) { return TDate(date).string(); } +// Salto se la riga non è abilitata +#define IF_IS_ENABLED(strarr) if(strcmp(strarr->get(_invio), FLAG_INVIO) != 0 && strcmp(strarr->get(_invio), FLAG_FORZATO) != 0 && strcmp(strarr->get(_invio), FLAG_INVIATO) != 0) continue; +// Ritorno il carattere senza accento maiuscolo +inline const char * noSpecial(char a); +// Ritorno se è ancora valida la bolla doganale senza informazioni fornitore +bool bd2017(); + + +///////////////////////////////////////////////////////////////////////////////////// +// TFp_record +///////////////////////////////////////////////////////////////////////////////////// + +// Connessione a db +SSimple_query& db() +{ + SSimple_query * _db = nullptr; + if (_db == nullptr) + _db = new SSimple_query(); + return *_db; +} + +// Contenitore di campi di un record di database MSSQL +class TFp_record : public TObject +{ + TString8 _table; + TToken_string _key; + TAssoc_array _fields; + +protected: + void copy(const TFp_record& rec) { _table = rec._table; _key = rec._key; _fields = rec._fields; } + const TString& var2str(const TString& fld, const TVariant& var) const; + +public: + void reset() { _fields.destroy(); } + void set(const char* fld, const TVariant& var); + void set(const char* fld, long var); + void set(const char* fld, const char* var); + void set(const char* fld, const real& var); + void set(const char* fld, const TString& var); + void set(const char* fld, const TDate& var); + void set(const char* fld, bool var); + const TVariant& get(const char* fld) const; + + bool insert(); + bool remove(); + bool search(); + bool search(const char* k1, const char* k2 = NULL, const char* k3 = NULL); + + virtual TObject* dup() const { return new TFp_record(*this); } + virtual bool ok() const { return _table.not_empty(); } + + TFp_record& operator=(const TFp_record& rec) { copy(rec); return *this; } + TFp_record(const TFp_record& rec) { copy(rec); } + TFp_record(const char* table); +}; + +///////////////////////////////////////////////////////////////////////////////////// +// TFp_cursors +///////////////////////////////////////////////////////////////////////////////////// + +/* + * Classe per la gestione di RMOVIVA, MOV, TFCUST + */ +class TFp_cursors : TObject +{ + friend class TCursor; + TISAM_recordset* c_rmoviva; + TISAM_recordset* c_trasfatt; + bool _newMov; + bool _newCust; + // Se trovo un record custom devo saltare tutti quelli che trovo successivamente, per fare ciò utilizzo una TToken_string + TToken_string _alqCust; + + TRectype _next(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento + TRectype _nextCust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento tra quelli custom + bool checkEnabled(TISAM_recordset* origCur); +public: + //TFp_cursors(); + ~TFp_cursors(); + long int getIvaItems() { return c_rmoviva->items(); } + long int getIvaPos() { return c_rmoviva->cursor()->pos(); } + TRectype getIva() { return c_rmoviva->cursor()->curr(); } + int next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf, TString& ocfpi); // Legge tutto il prossimo movimento, in importi mette per ogni codiva la somma + + int updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod = toSend); +}; + +///////////////////////////////////////////////////////////////////////////////////// +// TFp_mask +///////////////////////////////////////////////////////////////////////////////////// + +class TFp_mask : public TAutomask +{ + friend class TFp_cursors; + + TMaskmode _mode; + bool _sheet_dirty; + bool _filter_changed; + +protected: + virtual void next_page(int p); + TRecnotype nuovo_progr() const; + void changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const; + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void openJava(); + +public: + void setFilterChanged() { _filter_changed = true; } + void load_sheet(); + TFp_mask(TString msk); + ~TFp_mask(); + // Carico i tipi documento all'inizio + void loadConfig(); + // Salvo i tipi documento + void saveConfig(); + // Salvo tutti i records + bool saveAll(); + // Controllo tutti i records + bool checkAll(); + // Testo validità record + bool checkRec(TPrinter* stampa, TToken_string* rec); + // Controllo che siano presenti records + bool checkNotEmpty(); + // Controllo finale prima di inviare il tutto, se ci sono fatture + // con più volte lo stesso codice aliquota disabilito il precedente + void theFinalCheckDown(); + // Mette il flag di invio = [flag] per la riga numero [nrow] + void flagRow(int nrow, TString flag); + // Salto se la riga ha un tipo invio non del filtro + bool checkInvio(const TString& invio); +}; + +// Funzione inline di stampa +inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr); +TFp_mask& msk(); + +///////////////////////////////////////////////////////////////////////////////////// +// TFp_app +///////////////////////////////////////////////////////////////////////////////////// + +struct clifoDoc +{ + long contCliFo; + long countDoc; + std::map docID; +}; + +class TFp_app : public TSkeleton_application +{ + TAnagrafica _ditta; + TString16 _cofi; + TFilename _dbname; + TLog_report* _log; + TString _logTFF; + bool _append; + TString myrfso; + static long header; + // Solitamente nei programmi di campo cerco di sfruttare le classi interne ma per mancanza di tempo sono costretto a usare l'std::vector + std::map mCliDoc; + +private: + int parse_line(const TString& line, TString& var, TString& val) const; + bool create_table(TScanner& TFF, const TString& table); + TString getKey(TToken_string* strarr); + TString getHeader(TToken_string* strarr); + TString getBody(TToken_string* strarr, bool add = true); + bool tff0100(TSheet_field& sheet); // Header esportazione + bool tff0200(TString key); // Anagrafica ditta + bool tff0300(TString key, TRectype r_ana); // Rappresentante fiscale ditta + bool tff0400(TSheet_field& sheet); // Anagrafica clifo + bool tff0700(TSheet_field& sheet); // Testata documento + bool tff2200(TToken_string* strarr, int nriga); // Riepilogo aliquote + bool tff3100(TToken_string* strarr, TRectype r_ana); // Rappresentante fiscale clifo + bool setEsportato(TSheet_field& sheet); + bool emptyTables(TString key); // Cancella da tutte le tabelle i record con chiave key + +protected: + void log(int severity, const char* msg); + bool show_log(); + bool syncronizeDB(); + bool verifyDB(const bool create); + +public: + virtual bool create(); + virtual bool destroy(); + virtual void main_loop(); + bool send(TFp_mask* msk); + + TFp_app() : _log(NULL) {} +}; + +#endif \ No newline at end of file diff --git a/src/fp/fp0300.cpp b/src/fp/fp0300.cpp new file mode 100644 index 000000000..491c0b56b --- /dev/null +++ b/src/fp/fp0300.cpp @@ -0,0 +1,1849 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../ve/velib05.h" +#include "../cg/cglib03.h" + +#include "fp0.h" +#include "fp0300a.h" + +#include "../fe/felib.h" +#include "fplib01.h" + +#include +#include +#include +#include +#include +#include +#include "../cg/cfban.h" + + +///////////////////////////////////////////////////////////////////////////////////// +// Globals +///////////////////////////////////////////////////////////////////////////////////// + +#define LEN_HFATT 20 +#define LEN_BFATT 50 + +#define FLD_TIPO_SDI "S3[37,40]" + +///////////////////////////////////////////////////////////////////////////////////// +// Utilities +///////////////////////////////////////////////////////////////////////////////////// + +/* + * HFATT: tipocf(1) + codcf(6) + * BFATT: datadoc(8) + tipodoc_SDI(4) + numdoc(7) + */ + +// Crea la coppia di chiavi per il db PAF a partire da un documento vero e proprio +static bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt) +{ + hfatt.cut(0); + if (doc.clifor().occasionale()) + hfatt << "O" << doc.get("OCFPI"); + else + hfatt << doc.clifor().tipo() << doc.clifor().codice(); + CHECK(hfatt.full(), "Destinatario fattura P.A. non valido"); + + const TCodice_numerazione& codnum = doc.codice_numerazione(); + const long ndoc = doc.numero(); + TString16 fullnumdoc; + codnum.complete_num(ndoc, fullnumdoc); + + bfatt.cut(0) << doc.get_date(DOC_DATADOC).date2ansi() << '/' << doc.tipo().tipo_doc_sdi() << '/' << fullnumdoc; + return hfatt.full() && bfatt.full(); +} + +// Crea la coppia di chiavi per il db PAF a partire da un semplice record di testata documento +static bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt) +{ + TDocumento d(doc); + chiave_paf(d, hfatt, bfatt); + return hfatt.full(); +} + +// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h) +static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str) +{ + SLIST_ELT e = NULL; + for (e = xvt_slist_get_first(list); e; e = xvt_slist_get_next(list, e)) + { + const char* val = xvt_slist_get(list, e, NULL); + if (xvt_str_compare_ignoring_case(str, val) == 0) + break; + } + return e; +} + +// Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h) +bool xvt_fsys_fupdate(const char* src, const char* dst) +{ + bool ok = false; + if (xvt_fsys_file_exists(src)) + { + const long tsrc = xvt_fsys_file_attr(src, XVT_FILE_ATTR_MTIME); + if (tsrc > 0) + { + long tdst = 0; + if (xvt_fsys_file_exists(dst)) + tdst = xvt_fsys_file_attr(dst, XVT_FILE_ATTR_MTIME); + if (tsrc > tdst) + ok = xvt_fsys_fcopy(src, dst) != 0; + } + } + + return ok; +} + +///////////////////////////////////////////////////////////////////////////////////// +// TAncestor +///////////////////////////////////////////////////////////////////////////////////// + +struct TAncestor : public TObject +{ + TString20 _numdoc; + TDate _datadoc; + + TAncestor(const TRectype& rdoc); +}; + +TAncestor::TAncestor(const TRectype& rdoc) +{ + const int anno = rdoc.get_int(RDOC_ANNO); + const TString4 codnum = rdoc.get(RDOC_CODNUM); + const long ndoc = rdoc.get_long(RDOC_NDOC); + const TCodice_numerazione& num = cached_numerazione(codnum); + + TToken_string kdoc; + kdoc = rdoc.get(RDOC_PROVV); + kdoc.add(anno); + kdoc.add(codnum); + kdoc.add(ndoc); + const TRectype& doc = cache().get(LF_DOC, kdoc); + + TString16 numdoc; + num.complete_num(ndoc, numdoc); + _numdoc.format("%d/%s/%s", anno, (const char*)codnum, (const char*)numdoc); + _datadoc = doc.get_date(DOC_DATADOC); +} + + +///////////////////////////////////////////////////////////////////////////////////// +// TPaf_record +///////////////////////////////////////////////////////////////////////////////////// + +// Contenitore di campi di un record di database SQLite +class TPaf_record : public TObject +{ + TString8 _table; + TToken_string _key; + TAssoc_array _fields; + +protected: + void copy(const TPaf_record& rec) + { + _table = rec._table; + _key = rec._key; + _fields = rec._fields; + } + + const TString& var2str(const TString& fld, const TVariant& var) const; + +public: + void reset() { _fields.destroy(); } + void set(const char* fld, const TVariant& var); + void set(const char* fld, long var); + void set(const char* fld, const char* var); + void set(const char* fld, const real& var); + void set(const char* fld, const TString& var); + void set(const char* fld, const TDate& var); + void set(const char* fld, bool var); + const TVariant& get(const char* fld) const; + + bool insert(); + bool remove(); + bool search(); + bool search(const char* k1, const char* k2, const char* k3 = NULL); + + virtual TObject* dup() const { return new TPaf_record(*this); } + virtual bool ok() const { return _table.not_empty(); } + + TPaf_record& operator=(const TPaf_record& rec) + { + copy(rec); + return *this; + } + + TPaf_record(const TPaf_record& rec) { copy(rec); } + TPaf_record(const char* table); +}; + +// Imposta il valore di un campo variant +void TPaf_record::set(const char* fld, const TVariant& var) +{ + CHECK(fld && *fld, "Null field name"); + + if (var.is_null()) + { + _fields.remove(fld); + } + else + { + TVariant* obj = (TVariant*)_fields.objptr(fld); + if (obj != NULL) + *obj = var; + else + _fields.add(fld, new TVariant(var)); + } +} + +// Imposta il valore di un campo intero +void TPaf_record::set(const char* fld, long val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo stringa +void TPaf_record::set(const char* fld, const char* val) +{ + if (val == NULL) + set(fld, NULL_VARIANT); + else + { + const TVariant var(val); + set(fld, var); + } +} + +// Imposta il valore di un campo stringa +void TPaf_record::set(const char* fld, const TString& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo numerico +void TPaf_record::set(const char* fld, const real& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo data in formato ISO +void TPaf_record::set(const char* fld, const TDate& val) +{ + if (val.ok()) + { + const TVariant var(val); + set(fld, var); + } + else + set(fld, ""); +} + +// Imposta il valore di un campo booleano +void TPaf_record::set(const char* fld, bool var) +{ + set(fld, var ? "SI" : "NO"); +} + +// Legge il valore di un campo variant +const TVariant& TPaf_record::get(const char* fld) const +{ + const TVariant* var = (const TVariant*)_fields.objptr(fld); + return var ? *var : NULL_VARIANT; +} + +// Converte un variant in una stringa valida per SQLite +const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) const +{ + const TFieldtypes vt = var.type(); + if (vt == _realfld) + { + const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ") > 0 || fldname.find("PREZZO") > 0); + TString& tmp = get_tmp_string(); + tmp << '\'' << v.string() << '\''; + tmp.replace(',', '.'); + return tmp; + } + if (vt == _datefld) + { + TString& tmp = get_tmp_string(); + tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\''; + return tmp; + } + + const TString& str = var.as_string(); + + bool apici = vt == _alfafld; + if (apici && str[0] != '0' && real::is_natural(str)) + apici = false; + + if (!apici) + return str; + + TString& tmp = get_tmp_string(); + tmp = str; + for (int a = str.rfind('\''); a >= 0; a--) + { + if (tmp[a] == '\'') + tmp.insert("'", a); + } + tmp.insert("'", 0); + tmp << '\''; + return tmp; +} + +// Elimina il record in base ai campi chiave +bool TPaf_record::remove() +{ + TString256 query; + query << "DELETE FROM " << _table << " WHERE "; + int nkf = 0; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + if (nkf++ > 0) + query << " AND "; + query << fld << '=' << var2str(fld, var); + } + } + CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table); + query << ';'; + return db().sq_set_exec(query); +} + +// Carica un record in base ai campi chiave +bool TPaf_record::search() +{ + CHECKS(_fields.items() > 0, "Can't search with empty key on table ", static_cast(_table)); + TString256 query; + query << "SELECT * FROM " << _table << " WHERE "; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + query << fld << '=' << var2str(fld, var) << " AND "; + } + query.rtrim(5); + query << ';'; + + // return xvt_sql_execute(_db, query, paf_search_record, this) == 1; + // TODO: Valutare + return db().sq_set_exec(query); +} + +// Carica un record in base ad un massimo di 3 campi chiave +bool TPaf_record::search(const char* k1, const char* k2, const char* k3) +{ + _fields.destroy(); + + set(_key.get(0), k1); + set(_key.get(1), k2); + if (k3 && *k3) + set(_key.get(2), k3); + + return search(); +} + +// Aggiunge un record al db +bool TPaf_record::insert() +{ + CHECKS(_fields.items() > _key.items(), "Can't insert empty record on table ", _table); + + TString query, values; + query << "INSERT INTO " << _table << "\n("; + FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + query << fld << ','; + values << var2str(fld, var) << ','; + } + } + query.rtrim(1); + values.rtrim(1); + query << ")\nVALUES (" << values << ");"; + return db().sq_set_exec(query); +} + +// Crea un record della tabella data ed imposta i nomi dei campi chiave +TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',') +{ + TString q; + q << "SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = '" << table << + "' ORDER BY ORDINAL_POSITION"; + for (bool ok = db().sq_set_exec(q); ok; ok = db().sq_next()) + { + _key.add(db().sq_get("COLUMN_NAME")); + } + CHECKS(!_key.empty_items(), "Invalid primary key for table ", table); +} + +///////////////////////////////////////////////////////////////////////////////////// +// TPa_mask +///////////////////////////////////////////////////////////////////////////////////// + +class TPA_mask : public TAutomask +{ +protected: + void setFilterChanged(); + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void next_page(int p); + bool checkNotEmpty(); + + void fill(); + void init(); + bool is_fattura(const TRectype& doc) const; + + bool _filter_changed; + +public: + TPA_mask() : TAutomask("fp0300a"), _filter_changed(true) + { + } +}; + +bool TPA_mask::is_fattura(const TRectype& doc) const +{ + const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); + if (!td.is_fattura()) // Tengo per buone solo le fatture e le note di credito + return false; + + const TCodice_numerazione& cn = cached_numerazione(doc.get(DOC_CODNUM)); + return cn.tipo() == 2 && !cn.get_bool("B10"); // Controlla se fattura provvisioria esclusa da P.A. +} + + +void TPA_mask::fill() +{ + TSheet_field& docs = sfield(F_DOCS); + TString_array& sht = docs.rows_array(); + docs.hide(); + + sht.destroy(); + + const TDate dal = get(F_DATAINI); + const char filter_selected = get(F_FATTSEL)[0]; + + // Record di controllo per eventuali elaborazioni precedenti + TString hfatt(LEN_HFATT), bfatt(LEN_BFATT); + TPaf_record paf0100f("PAF0100F"); + + TString query; + + query << "USE 33 " << + "SELECT (BETWEEN(33.DATADOC,#DADATADOC,#ADATADOC))&&(33.TIPOCF=='C')&&(17.PADESTIN!='')&&(400@." FLD_TIPO_SDI "!='')"; + if(get(F_DATIPODOC).full() && get(F_ATIPODOC).full()) + { + query << "&&(BETWEEN(33.TIPODOC, #DATIPODOC, #ATIPODOC))"; + } + else if(get(F_DATIPODOC).full()) + { + query << "&&(33.TIPODOC>=#DATIPODOC)"; + } + else if (get(F_ATIPODOC).full()) + { + query << "&&(33.TIPODOC<=#ATIPODOC)"; + } + query << "\nJOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF \n" << + "JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF \n" << + "JOIN %TIP TO 33 ALIAS 400 INTO CODTAB==TIPODOC"; + + TISAM_recordset rec(query); + if (get(F_DATIPODOC).full()) + rec.set_var("#DATIPODOC", get(F_DATIPODOC)); + if (get(F_ATIPODOC).full()) + rec.set_var("#ATIPODOC", get(F_ATIPODOC)); + + rec.set_var("#DADATADOC", get_date(F_DATAINI)); + rec.set_var("#ADATADOC", get_date(F_DATAEND)); + + TProgress_monitor pi(rec.items(), NULL); + + for (bool okc = rec.move_first(); okc; okc = rec.move_next()) + { + if (!pi.add_status()) + break; + const TRectype& doc = rec.cursor()->curr(); + const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); + + bool sent = false; + if (chiave_paf(doc, hfatt, bfatt)) + { + if (paf0100f.search(NULL, hfatt, bfatt)) + { + if (filter_selected && paf0100f.get("P1_GESTIONE").as_string()[0] != filter_selected) + continue; + } + } + + TToken_string* row = new TToken_string; + *row = sent ? " " : "X"; + row->add(rec.get(DOC_ANNO).as_int(), 1); + row->add(rec.get(DOC_CODNUM).as_string()); + row->add(rec.get(DOC_TIPODOC).as_string()); + row->add(rec.get("400.S3").as_string().mid(37,4)); + row->add(rec.get(DOC_NDOC).as_int()); + row->add(rec.get(DOC_DATADOC).as_date()); + row->add(rec.get(CFV_CODCF).as_int()); + row->add(rec.get("20." CLI_RAGSOC).as_string()); + row->add(rec.get(CFV_PADESTIN).as_string()); + row->add(rec.get(CFV_PARIFAMM).as_string()); + row->add(rec.get("20." CLI_COFI).as_string()); + row->add(!td.invio_xml() ? "X" : ""); + + bool split = rec.get("20." CLI_SPLITPAY).as_bool(); + if (split) + { + const long numreg = rec.get(DOC_NUMREG).as_int(); + if (numreg > 0) + { + const TRectype& mov = cache().get(LF_MOV, numreg); + split = is_split_payment(mov); + } + } + row->add(split ? "X" : " "); + + const bool attach = !rec.get("COLL_GOLEM").is_empty(); + row->add(attach ? "X" : " "); + + sht.add(row); + } + + docs.force_update(); + docs.show(); +} + +void TPA_mask::setFilterChanged() +{ + _filter_changed = true; +} + +bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_RECALC: + if (e == fe_button) + next_page(1); + break; + case F_DATAINI: + if (e == fe_init) + o.set(ini_get_string(CONFIG_DITTA, "fp", "LastXML", "01-01-2018")); + else if (e == fe_close) + ini_set_string(CONFIG_DITTA, "fp", "LastXML", o.get()); + break; + case F_DATAEND: + if (e == fe_init) + o.set(TDate(TODAY)); + case F_DOCS: + if (e == se_query_add || e == se_query_del) + return false; + break; + case DLG_USER: + if (e == fe_button && jolly > 0) + { + TSheet_field& docs = sfield(F_DOCS); + TToken_string& row = docs.row(docs.selected()); + TRectype doc(LF_DOC); + doc.put(DOC_PROVV, 'D'); + doc.put(DOC_ANNO, row.get(1)); + doc.put(DOC_CODNUM, row.get(2)); + doc.put(DOC_TIPODOC, row.get(3)); + doc.put(DOC_NDOC, row.get(5)); + if (doc.edit()) + fill(); + } + break; + case DLG_ALL: + { + if (e == fe_button) + { + TSheet_field& docs = sfield(F_DOCS); + TString_array& sht = docs.rows_array(); + const int items = sht.items(); + + if (items > 0) + { + const TString4 select = *(sht.row(0).get(0)) == 'X' ? "" : "X"; + for (int i = 0; i < items; i++) + sht.row(i).add(select, 0); + docs.force_update(); + } + } + } + break; + default: break; + } + if (e == fe_modify && jolly == 0) + { + if (o.dlg() >= START_MASK && o.dlg() <= END_MASK) + { + setFilterChanged(); + } + } + return true; +} + +void TPA_mask::next_page(int p) +{ + TAutomask::next_page(p); + if (_filter_changed) + { + TSheet_field& sf = sfield(F_DOCS); + if (curr_win() == sf.parent()) + { + fill(); + sf.force_update(); + _filter_changed = false; + } + } +} + +bool TPA_mask::checkNotEmpty() +{ + TSheet_field& sheet = sfield(F_DOCS); + TString msg; + + if (sheet.empty()) + msg = "La tabella dei movimenti è vuota, vuoi caricarla con i filtri selezionati?"; + else if (_filter_changed) + msg = "I filtri sono stati cambiati, vuoi ricaricare la tabella con i nuovi filtri selezionati?"; + + if (msg.full() && yesno_box(msg)) + { + next_page(1); + } + return sheet.full(); +} + +///////////////////////////////////////////////////////////////////////////////////// +// TDoc2Paf +///////////////////////////////////////////////////////////////////////////////////// + +class TDoc2Paf : public TSkeleton_application +{ + TAnagrafica _ditta; + TString16 _cofi; + TFilename _dbname; + TLog_report* _log; + TString _logpaf; + TString _def_fld; + TString _def_usr_fld; + +private: + int parse_line(const TString& line, TString& var, TString& val) const; + bool create_table(TScanner& paf, const TString& table); + + const TRectype* find_parent_row(const TRectype& rdoc) const; + int find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const; + +protected: + bool parse_sconto(const TString& formula, TToken_string& sconti) const; + bool get_bnp_iban(const TString& abi, const TString& cab, int prg, TString& iban) const; + bool get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, + TString& istituto) const; + const char* descrizione(const TRiga_documento& rdoc) const; + const TRectype& cco(const TRectype& doc) const; // Contratto/Convenzione/Offerta + + void log(int severity, const char* msg); + bool show_log(); + const char* natura(const TString& codiva) const; + static void set_IVA(const TString& codiva, TPaf_record& paf); + static void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf); + static void add_row_art(const TString codice_tipo, const TString& codice_valore, TPaf_record& paf); + + + bool elabora(TDocumentoEsteso& doc); + bool elabora(const TRectype& rec); + bool elabora(const TDoc_key& key); + bool elabora(const TFilename& ini); + //bool genera_xml(); + +public: + virtual bool create(); + virtual bool destroy(); + virtual void main_loop(); + + TDoc2Paf() : _log(NULL) + { + } +}; + +bool TDoc2Paf::parse_sconto(const TString& formula, TToken_string& sconti) const +{ + sconti.cut(0); + int start = 0; + for (int i = 0; ; i++) + { + const char c = formula[i]; + if (c == '+' || c == '-' || c < ' ') + { + if (i > 0) + { + TString8 tok = formula.sub(start, i); + tok.replace(',', '.'); + const real perc = tok; + if (!perc.is_zero()) + sconti.add(tok); + } + if (c < ' ') + break; + start = i; + } + } + return sconti.full(); +} + +bool TDoc2Paf::get_bnp_iban(const TString& abi, const TString& cab, int nprog, TString& iban) const +{ + TTable bnp("BNP"); + TString16 key; + key << abi << cab; + if (nprog > 0) + { + TString4 sprog; + sprog.format("%02d", nprog); + key << sprog; + } + bnp.put("CODTAB", key); + int err = bnp.read(_isgteq); + if (err == NOERR && !bnp.get("CODTAB").starts_with(abi)) + err = _iskeynotfound; + if (err == NOERR) + iban = bnp.get("S3"); + + return err == NOERR; +} + +bool TDoc2Paf::get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const +{ + bool found = false; + abi = doc.get(DOC_CODABIP); + cab = doc.get(DOC_CODCABP); + int prg = doc.get_int(DOC_PROGBNP); + + found = abi.full() && cab.full(); + if (found) + get_bnp_iban(abi, cab, prg, iban); + + if (!found) // Se non trovo banca sul DOC la cerco su CFBAN + { + TToken_string key; + key.add("C"); + key.add(doc.codcf()); + key.add("N"); + key.add(1); + const TRectype& cfban = cache().get(LF_CFBAN, key); + if (!cfban.empty()) + { + abi = cfban.get(CFBAN_ABI); + cab = cfban.get(CFBAN_CAB); + prg = cfban.get_int(CFBAN_PROGPR); + found = abi.full() && cab.full(); + iban = cfban.get(CFBAN_IBAN); + if (found && iban.blank()) + get_bnp_iban(abi, cab, prg, iban); + } + } + + if (!found) // Se non trovo banca su CFBAN la cerco su CFVEN + { + const TRectype& cfven = doc.clifor().vendite(); + abi = cfven.get(CFV_CODABIPR); + cab = cfven.get(CFV_CODCABPR); + found = abi.full() && cab.full(); + if (found) + get_bnp_iban(abi, cab, 0, iban); + } + + if (found) + istituto = cache().get("%BAN", abi, "S0"); + + return found; +} + +const char* TDoc2Paf::descrizione(const TRiga_documento& rdoc) const +{ + if (rdoc.get_bool(RDOC_DESCLUNGA)) + { + TString tmp; + tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST); + tmp.replace('\n', ' '); + tmp.strip_double_spaces(); + tmp.trim(); + TParagraph_string para(tmp, 100); + return para.get(0); + } + return rdoc.get(RDOC_DESCR); +} + +const TRectype* TDoc2Paf::find_parent_row(const TRectype& rdoc) const +{ + const long id = rdoc.get_long(RDOC_DAIDRIGA); + if (id > 0L) + { + TToken_string key; + key.add(rdoc.get(RDOC_DACODNUM)); + if (key.full()) + { + key.add(rdoc.get(RDOC_DAANNO)); + key.add(rdoc.get(RDOC_DAPROVV)); + key.add(rdoc.get(RDOC_DANDOC)); + for (int r = 0; ; r++) + { + if (r == 0) + key.add(id, 4); + else + key.add(r, 4); + const TRectype& rec = cache().get(LF_RIGHEDOC, key); + if (r > 0 && rec.empty()) + break; + if (rec.get_long(RDOC_IDRIGA) == id) + return &rec; + } + } + } + return NULL; +} + +int TDoc2Paf::find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const +{ + if (rdoc.is_articolo()) + { + for (const TRectype* prdoc = find_parent_row(rdoc); prdoc != NULL; prdoc = find_parent_row(*prdoc)) + { + const TCodice_numerazione& cn = cached_numerazione(prdoc->get(RDOC_CODNUM)); + const int td = cn.tipo(); + if (td > 0 && ancestors.objptr(td) == NULL) + ancestors.add(new TAncestor(*prdoc), td); + } + } + return ancestors.items(); +} + +const TRectype& TDoc2Paf::cco(const TRectype& doc) const +{ + TString80 conkey; + const TString& con = doc.get(DOC_CONTRATTO); + if (con.full()) + { + char tcon = doc.get_char(DOC_MODPAG); + if (tcon < 'C') tcon = 'C'; + conkey.format("%c%6ld%s", tcon, doc.get_long(DOC_CODCF), (const char*)con); + } + return cache().get("&CON", conkey); +} + +void TDoc2Paf::log(int severity, const char* msg) +{ + if (severity < 0) + { + _logpaf = msg; + } + else if (_log == NULL) + { + _log = new TLog_report; + if (_logpaf.full()) + { + TString txt; + txt << _logpaf << ": " << msg; + _log->log(severity, txt); + } + else + _log->log(severity, msg); + } +} + +bool TDoc2Paf::show_log() +{ + bool ok = true; + if (_log) + { + _log->preview(); + delete _log; + _log = NULL; + ok = noyes_box(TR("Si desidera procedere con la generazione file xml?")); + } + return ok; +} + + +const char* TDoc2Paf::natura(const TString& codiva) const +{ + return cache().get("%IVA", codiva, "S12"); +} + +void TDoc2Paf::set_IVA(const TString& codiva, TPaf_record& paf) +{ + // É necessario il cast a real? + paf.set("PI_ALIQUOTAIVA", static_cast(cache().get("%IVA", codiva, "R0"))); + paf.set("PI_NATURA", cache().get("%IVA", codiva, "S12")); +} + +void TDoc2Paf::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) +{ + set_IVA(rdoc.get(RDOC_CODIVA), paf); +} + +void TDoc2Paf::add_row_art(const TString codice_tipo, const TString& codice_valore, TPaf_record& paf) +{ + static long riga_art = 0; + paf.set("PY_KEYNLINAR", ++riga_art); + paf.set("PY_TIPOARTICOLO", codice_tipo); + paf.set("PY_VALOREARTICOLO", codice_valore); + paf.insert(); +} + + +bool TDoc2Paf::elabora(TDocumentoEsteso& doc) +{ + TString8 hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. o di 7 caratteri per un privato + TString20 bfatt; // Codice univoco di 20 caratteri del documento + + TAnagrafica clifo(doc.clifor().tipo(), doc.clifor().codice()); + + TString8 coddest = doc.clifor().vendite().get("PADESTIN"); + TString pec = doc.clifor().get("PEC"); + bool enapec = false; + if(coddest.empty()) + { + // Controllo se ha la pec + if (pec.full()) + { + coddest = "0000000"; + enapec = true; + } + // Controllo se è straniero + else if(clifo.estero()) + { + coddest = "XXXXXXX"; + } + else + return false; + } + + bool privato = coddest.len() != 6; + + + if (!chiave_paf(doc, hfatt, bfatt)) + return false; + log(-1, bfatt); + + const TFirm& firm = prefix().firm(); + const char* const paese = "IT"; + TCausale caus = TCausale(doc.tipo().causale(), doc.anno()); + + // + TPaf_record paf0100f("PAF0100F"); + paf0100f.set("P1_KEYPRGINVIO", ""); // Ci pensa SiAggFP + paf0100f.set("P1_KEYHEADERFATT", hfatt); + paf0100f.set("P1_KEYBODYFATT", bfatt); + paf0100f.remove(); + + paf0100f.set("P1_TRASMITTPAESE", paese); + paf0100f.set("P1_TRASMITTCOD", _cofi); + paf0100f.set("P1_FMTTRASMISS", privato? "FPR12" : "FPA12"); // SDI11 si usa dal 2015 per lo split payment (prima era SDI10) + + paf0100f.set("P1_CODDEST", coddest); + TString80 tel; + tel << firm.get(NDT_PTEL) << firm.get(NDT_TEL); + paf0100f.set("P1_TELEFONO", tel); + paf0100f.set("P1_MAIL", firm.get(NDT_MAIL)); + paf0100f.set("P1_GESTIONE", "P"); + paf0100f.insert(); + // + + if (enapec) + { + // + TPaf_record paf3200f("PAF3200F"); + paf3200f.set("PU_KEYHEADERFATT", hfatt); + paf3200f.set("PU_KEYBODYFATT", bfatt); + paf3200f.remove(); + paf3200f.set("PU_PEC", bfatt); + paf3200f.insert(); + // + } + + // + TPaf_record paf0200f("PAF0200F"); + paf0200f.set("P2_KEYHEADERFATT", hfatt); + paf0200f.set("P2_KEYBODYFATT", bfatt); + paf0200f.remove(); + + if (_ditta.partita_IVA().full()) + { + paf0200f.set("P2_FISCIVAPAESE", _ditta.stato_partita_IVA()); + paf0200f.set("P2_FISCIVACOD", _ditta.partita_IVA()); + } + paf0200f.set("P2_CODFISCALE", _ditta.codice_fiscale()); + if (_ditta.fisica()) + { + paf0200f.set("P2_ANANOME", _ditta.nome()); + paf0200f.set("P2_ANACOGNOME", _ditta.cognome()); + } + else + { + paf0200f.set("P2_ANADENOMIN", _ditta.ragione_sociale()); + } + + paf0200f.set("P2_REGFISCALE", doc.tipo().reg_fisc()); + + // DatiSede + paf0200f.set("P2_SEDEIND", _ditta.via_residenza()); + paf0200f.set("P2_SEDENRCIVICO", _ditta.civico_residenza()); + paf0200f.set("P2_SEDECAP", _ditta.CAP_residenza()); + paf0200f.set("P2_SEDECOMUNE", _ditta.comune_residenza()); + paf0200f.set("P2_SEDEPROV", _ditta.provincia_residenza()); + paf0200f.set("P2_SEDENAZ", paese); + paf0200f.set("P2_GESTIONE", "D"); + + TAnagrafica cliente(doc.clifor()); + + TString rifamm = cco(doc).get("S4"); + if (rifamm.blank()) + rifamm = doc.clifor().vendite().get(CFV_PARIFAMM); + paf0200f.set("P2_RIFAMMINISTR", rifamm); + + TISAM_recordset unloc("USE UNLOC\nJOIN COMUNI INTO COM==COMCCIAA\nFROM CODDITTA=#DITTA\nTO CODDITTA=#DITTA"); + unloc.set_var("#DITTA", firm.get(NDT_CODDITTA)); + if (unloc.move_first()) + { + const TString& numrea = unloc.get(ULC_NUMCCIAA).as_string(); + if (numrea.full()) + { + paf0200f.set("P2_ISCRREANUM", numrea); + paf0200f.set("P2_ISCRREAUFF", unloc.get("13->" COM_PROVCOM)); + } + } + + if (_ditta.giuridica()) + { + TISAM_recordset anagiu("USE ANAGIU\nFROM CODANAGR=#CODICE\nTO CODANAGR=#CODICE"); + anagiu.set_var("#CODICE", firm.get(NDT_CODANAGR)); + if (anagiu.move_first()) + { + paf0200f.set("P2_ISCRREACAP", anagiu.get(ANG_CAPSOC)); + const int ss = anagiu.get(ANG_STATOSOC).as_int(); + paf0200f.set("P2_ISCRREASLIQUID", (ss == 2 || ss == 3) ? "LS" : "LN"); + } + } + else + paf0200f.set("P2_ISCRREASLIQUID", "LN"); + + paf0200f.insert(); + + // + + // + + TPaf_record paf0400f("PAF0400F"); + paf0400f.set("P4_KEYHEADERFATT", hfatt); + paf0400f.set("P4_KEYBODYFATT", bfatt); + paf0400f.remove(); + + if (cliente.partita_IVA().full()) + { + paf0400f.set("P4_FISCIVAPAESE", cliente.stato_partita_IVA()); + paf0400f.set("P4_FISCIVACOD", cliente.partita_IVA()); + } + paf0400f.set("P4_CODFISC", cliente.codice_fiscale()); + + if (cliente.fisica()) + { + paf0400f.set("P4_ANANOME", cliente.nome()); + paf0400f.set("P4_ANACOGNOME", cliente.cognome()); + } + else + { + paf0400f.set("P4_ANADENOM", cliente.ragione_sociale()); + } + + // DatiSede + paf0400f.set("P4_SEDEIND", cliente.via_residenza()); + paf0400f.set("P4_SEDENRCIVICO", cliente.civico_residenza()); + paf0400f.set("P4_SEDECAP", cliente.CAP_residenza()); + paf0400f.set("P4_SEDECOMUNE", cliente.comune_residenza()); + paf0400f.set("P4_SEDEPROV", cliente.provincia_residenza()); + paf0400f.set("P4_SEDENAZ", cliente.stato_residenza_ISO()); + paf0400f.set("P4_GESTIONE", "D"); + paf0400f.insert(); + // + + // + TPaf_record paf0700f("PAF0700F"); + paf0700f.set("P7_KEYHEADERFATT", hfatt); + paf0700f.set("P7_KEYBODYFATT", bfatt); + paf0700f.remove(); + paf0700f.set("P7_TIPODOC", doc.tipo().tipo_doc_sdi()); + paf0700f.set("P7_DIVISA", "EUR"); // Aggiungere codice ISO 4217 a tabella divise (%VAL) + paf0700f.set("P7_DATA", doc.data()); + + const TCodice_numerazione& codnum = doc.codice_numerazione(); + TString20 numdoc; + codnum.complete_num(doc.numero(), numdoc); + paf0700f.set("P7_NUMERO", numdoc); + paf0700f.set("P7_GESTIONE", "D"); + + // + if(doc.get_real("BOLLI") > ZERO) + { + paf0700f.set("P7_IMPORTOBOLLO", doc.get("BOLLI")); + } + // + + // + // Non la mettiamo! + // + + // Non inserisco più adesso il paf0700f ma lo faccio alla fine (per inserire le ritenute) + + // + TPaf_record paf0900f("PAF0900F"); + paf0900f.set("P9_KEYHEADERFATT", hfatt); + paf0900f.set("P9_KEYBODYFATT", bfatt); + paf0900f.remove(); + + TString80 sconto_expr = doc.get(DOC_SCONTOPERC); + TToken_string sconti; + if (parse_sconto(sconto_expr, sconti)) + { + long nlin_sconto = 0; + FOR_EACH_TOKEN(sconti, str) + { + const real sconto = str; + if (!sconto.is_zero()) // Precauzione inutile + { + paf0900f.set("P9_RIFNUMLINEA", ++nlin_sconto); + if (sconto > ZERO) + { + paf0900f.set("P9_TIPOSCONTO", "SC"); + paf0900f.set("P9_PERCSCONTO", sconto); + } + else + { + paf0900f.set("P9_TIPOSCONTO", "MG"); + paf0900f.set("P9_PERCSCONTO", -sconto); + } + paf0900f.set("P9_GESTIONE", "D"); + paf0900f.insert(); + } + } + } + // + + // + TPaf_record paf2700f("PAF2700F"); + paf2700f.set("PQ_KEYHEADERFATT", hfatt); + paf2700f.set("PQ_KEYBODYFATT", bfatt); + paf2700f.remove(); + paf2700f.set("PQ_IMPTOTDOC", doc.totale_doc()); + + const TRectype& cont_conv_off = cco(doc); + TString causale = cont_conv_off.get("S1"); + if (causale.full()) + { + causale << ' ' << cont_conv_off.get("S2"); + causale << ' ' << cont_conv_off.get("S3"); + causale.strip_double_spaces(); + causale.cut(200); + } + else + causale = doc.tipo().descrizione(); + paf2700f.set("PQ_CAUSALE", causale); + // paf2700f.set("PQ_ART73", true); + paf2700f.set("PQ_GESTIONE", "D"); + paf2700f.insert(); + // + + // Azzera contratti + TPaf_record paf1000f("PAF1000F"); + paf1000f.set("P0_KEYHEADERFATT", hfatt); + paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.remove(); + + // Azzera convenzioni + TPaf_record paf1100f("PAF1100F"); + paf1100f.set("PA_KEYHEADERFATT", hfatt); + paf1100f.set("PA_KEYBODYFATT", bfatt); + paf1100f.remove(); + + // Azzera ordini + TPaf_record paf1200f("PAF1200F"); + paf1200f.set("PB_KEYHEADERFATT", hfatt); + paf1200f.set("PB_KEYBODYFATT", bfatt); + paf1200f.remove(); + + // Azzera DDT + TPaf_record paf1600f("PAF1600F"); + paf1600f.set("PF_KEYHEADERFATT", hfatt); + paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.remove(); + + const TString16 cup = doc.get(DOC_CUP); + const TString16 cig = doc.get(DOC_CIG); + const TString80 com = doc.get(DOC_CODCMS); + + TString80 con = doc.get(DOC_CONTRATTO); + if (con.full() || cup.full() || cig.full()) + { + char tcon = doc.get_char(DOC_MODPAG); + if (tcon < 'C') tcon = 'C'; + + TDate datadoc; // Data contratto non obbligatoria + if (con.full()) + { + datadoc = cco(doc).get_date("D0"); + } + else + { + // IdDocumento obbligatorio + con = cig; + if (con.blank()) + con = cup; + } + + if (tcon == 'O') + { + paf1000f.set("P0_RIFNUMLINEA", 0L); + paf1000f.set("P0_IDDOC", con); + paf1000f.set("P0_DATADOC", datadoc); + paf1000f.set("P0_COMMCONVENZ", com); + paf1000f.set("P0_CODCUP", cup); + paf1000f.set("P0_CODCIG", cig); + paf1000f.set("P0_GESTIONE", "D"); + paf1000f.insert(); + } + else if (tcon == 'C') + { + paf1100f.set("PA_RIFNUMLINEA", 0L); + paf1100f.set("PA_IDDOC", con); + paf1100f.set("PA_DATADOCU", datadoc); + paf1100f.set("PA_COMMCONVENZ", com); + paf1100f.set("PA_CODCUP", cup); + paf1100f.set("PA_CODCIG", cig); + paf1000f.set("PA_GESTIONE", "D"); + paf1100f.insert(); + } + else + { + paf1200f.set("PB_RIFNUMLINEA", 0L); + paf1200f.set("PB_IDDOC", con); + paf1200f.set("PB_DATADOCO", datadoc); + paf1200f.set("PB_COMMCONVENZ", com); + paf1200f.set("PB_CODCUP", cup); + paf1200f.set("PB_CODCIG", cig); + paf1200f.set("PB_GESTIONE", "D"); + paf1200f.insert(); + } + } + + if (cup.blank() && cig.blank()) + log(1, "CIG e CUP assenti"); + + // + + TPaf_record paf1800f("PAF1800F"); + paf1800f.set("PI_KEYHEADERFATT", hfatt); + paf1800f.set("PI_KEYBODYFATT", bfatt); + paf1800f.remove(); // Cancella tutte le righe documento + + TPaf_record paf2000f("PAF2000F"); + paf2000f.set("PJ_KEYHEADERFATT", hfatt); + paf2000f.set("PJ_KEYBODYFATT", bfatt); + paf2000f.remove(); // Cancella tutti gli sconti di riga + + TPaf_record paf1900f("PAF1900F"); + paf1900f.set("PY_KEYHEADERFATT", hfatt); + paf1900f.set("PY_KEYBODYFATT", bfatt); + paf1900f.remove(); // Cancella tutte le righe articoli del documento + + + long riga = 0; + TString16 codivadefault; + { + FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) + { + codivadefault = rdoc->get(RDOC_CODIVA); + if (codivadefault.full()) + break; + } + } + FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) + { + paf1800f.reset(); + paf1800f.set("PI_KEYHEADERFATT", hfatt); + paf1800f.set("PI_KEYBODYFATT", bfatt); + paf1800f.set("PI_NUMEROLINEA", ++riga); + paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc)); + // paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione + + // + long riga_art = 0; + TArticolo& art = rdoc->articolo(); + if (art.ok()) + { + paf1900f.reset(); + paf1900f.set("PY_KEYHEADERFATT", hfatt); + paf1900f.set("PY_KEYBODYFATT", bfatt); + paf1900f.set("PY_KEYNLINEA", riga); + + TString& tmp = get_tmp_string(); + + if (art.codice().full()) + { + tmp.cut(0) << art.codice(); // Fixed_string di merda + add_row_art("Codice interno", tmp, paf1900f); + } + if (rdoc->tipo().codice() == "14") + { + add_row_art("Codice cliente", rdoc->get("CODARTALT"), paf1900f); + } + } + // + + + set_IVA(codivadefault, paf1800f); + + if (rdoc->is_merce()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + const real qta = rdoc->get(RDOC_QTA); + if (qta.is_zero()) + { + TString msg; + msg.format("La riga merce %d ha quantità nulla", riga); + log(1, msg); + } + if (qta >= ZERO) + { + paf1800f.set("PI_QUANTITA", qta); + paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false)); + } + else + { + paf1800f.set("PI_QUANTITA", -qta); + paf1800f.set("PI_PREZZOUNIT", -rdoc->prezzo(true, false)); + } + paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false)); + set_IVA(*rdoc, paf1800f); + + /* + const TDate data = doc.get(DOC_DATADOC); + paf1800f.set("PI_DTINIZIOPER", data); + paf1800f.set("PI_DTFINEPER", data); + */ + + // + + sconto_expr = rdoc->get(RDOC_SCONTO); + if (parse_sconto(sconto_expr, sconti)) + { + long nlin_sconto = 0; + FOR_EACH_TOKEN(sconti, str) + { + const real perc = str; + if (!perc.is_zero()) + { + paf2000f.set("PJ_KEYNLINEA", (long)r); + paf2000f.set("PJ_KEYNLINAR", ++nlin_sconto); + if (perc > ZERO) + { + paf2000f.set("PJ_TIPOSCONTO", "SC"); + paf2000f.set("PJ_PERCSCONTO", perc); + } + else + { + paf2000f.set("PJ_TIPOSCONTO", "MG"); + paf2000f.set("PJ_PERCSCONTO", -perc); + } + paf2000f.set("PJ_GESTIONE", "D"); + paf2000f.insert(); + } + } + } + // + + + /* + * Ogni riga si può rifare a un DDT/Ordine diverso, per questo devo inserire i dati da qua e non in testata + */ + TArray ancestors; + find_ancestors(*rdoc, ancestors); + for (int i = ancestors.last(); i > 0; i = ancestors.pred(i)) + { + const TAncestor& a = (const TAncestor&)ancestors[i]; + if (i == 1) + { + // + TPaf_record paf1600f("PAF1600F"); + paf1600f.reset(); + paf1600f.set("PF_KEYHEADERFATT", hfatt); + paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.set("PF_RIFNUMLINEA", (long)r); + paf1600f.set("PF_NUMDDDT", a._numdoc); + paf1600f.set("PF_DATADDT", a._datadoc); + paf1600f.set("PF_GESTIONE", "D"); + paf1600f.insert(); + // + } + else if (i == 3) + { + // + TPaf_record paf1000f("PAF1000F"); + paf1000f.set("P0_KEYHEADERFATT", hfatt); + paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.set("P0_RIFNUMLINEA", (long)r); + paf1000f.set("P0_IDDOC", a._numdoc); + paf1000f.set("P0_DATADOC", a._datadoc); + paf1000f.set("P0_COMMCONVENZ", com); + paf1000f.set("P0_CODCUP", cup); + paf1000f.set("P0_CODCIG", cig); + paf1000f.set("P0_GESTIONE", "D"); + paf1000f.insert(); + // + } + } + + } + else if (rdoc->is_spese()) + { + const TSpesa_prest& sp = rdoc->spesa(); + const real imp = rdoc->importo(true, false); + real qta = UNO; + if (sp.is_tipo()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + qta = rdoc->get_real(RDOC_QTA); + if (qta.is_zero()) + { + TString msg; + msg.format("La riga spese a quantità %d ha quantità nulla (campo %s)", riga, (const char*)rdoc->field_qta()); + log(1, msg); + qta = UNO; + } + paf1800f.set("PI_QUANTITA", qta); + } + real prz = imp; + if (qta != UNO) + { + prz = rdoc->prezzo(true, false); + if (prz.is_zero() && !imp.is_zero()) + { + const TPrice price(imp / qta); + prz = price.get_value(); + } + } + paf1800f.set("PI_PREZZOUNIT", prz); + paf1800f.set("PI_PRZTOTALE", imp); + set_IVA(*rdoc, paf1800f); + + // Controllo se è una ritenuta fiscale + // + if(sp.tipo_ritenuta() == 'F') + { + paf0700f.set("P7_TIPORITENUTA", cliente.fisica() ? "RT01" : "RT02"); + paf0700f.set("P7_IMPORTORIT", doc.imponibile() * sp.perc() / CENTO); + paf0700f.set("P7_ALIQUOTARIT", TCodiceIVA(sp.cod_iva()).percentuale()); + paf0700f.set("P7_CAUSPAGAM", cache().get("CA7", to_tstring(sp.caus_770()), "S2")); + } + // + } + else if (rdoc->is_prestazione()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + real qta = rdoc->get(RDOC_QTA); + if (qta.is_zero()) qta = UNO; + paf1800f.set("PI_QUANTITA", qta); + paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false)); + paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false)); + set_IVA(*rdoc, paf1800f); + } + + paf1800f.set("PI_GESTIONE", "D"); + paf1800f.insert(); + } + // + + + // + /* + * Non valorizziamo nulla al momento in quanto su Campo i dati obbligatori non ci sono/non sono obbligatori + TString cod_vettore = doc.get("CODVETT1"); + // É una fattura accompagnatoria! + if(cod_vettore.full()) + { + } + */ + // + + // Salvo la testata + paf0700f.insert(); + + // + TPaf_record paf2200f("PAF2200F"); + paf2200f.set("PL_KEYHEADERFATT", hfatt); + paf2200f.set("PL_KEYBODYFATT", bfatt); + paf2200f.remove(); // Cancella tutte le righe di riepilogo IVA + + const char* eiva = "I"; // Esigibilità IVA: Immediata, Differita, Split payment + if (doc.is_split_payment()) + eiva = "S"; + else if (doc.get_bool(DOC_LIQDIFF) || doc.get_bool(DOC_IVAXCASSA)) + eiva = "D"; + + long num_riep = 0; + TAssoc_array& tiva = doc.tabella_iva(false); + FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm) + { + const TRiepilogo_iva& riva = *(const TRiepilogo_iva*)itm; + const real aliquota = riva.cod_iva().percentuale(); + paf2200f.set("PL_ALIQUOTAIVA", aliquota); + if (aliquota.is_zero()) + paf2200f.set("PL_NATURA", natura(riva.cod_iva().codice())); + + paf2200f.set("PL_IMPONIBILE", riva.imponibile()); + paf2200f.set("PL_IMPOSTA", riva.imposta()); + paf2200f.set("PL_ESIGIVA", eiva); + if (*eiva == 'S') + paf2200f.set("PL_RIFNORMATIVO", "Scissione pagamenti art.17-ter DPR 633/72"); + else + paf2200f.set("PL_RIFNORMATIVO", riva.cod_iva().descrizione()); + paf2200f.set("PL_GESTIONE", "D"); + paf2200f.insert(); + } + // + + // + TPaf_record paf2400f("PAF2400F"); + paf2400f.set("PN_KEYHEADERFATT", hfatt); + paf2400f.set("PN_KEYBODYFATT", bfatt); + paf2400f.remove(); // Cancella i dati pagamento + + TPagamento& pag = doc.pagamento(); + doc.scadenze_recalc(); // Ricalcola array delle rate + TString_array& scad = doc.scadenze(); + const int nrate = scad.items(); // Conta rate generate + const char* rateazione = pag.cond_pag_sdi(); // A rate (TP01) o una soluzione(TP02)? + paf2400f.set("PN_RIGA", ZERO); // Al momento non gestiamo più tipologie di pagamento per documento + paf2400f.set("PN_CONDPAGAMENTO", rateazione); + paf2400f.set("PN_GESTIONE", "D"); + paf2400f.insert(); + + TPaf_record paf2500f("PAF2500F"); + paf2500f.set("PO_KEYHEADERFATT", hfatt); + paf2500f.set("PO_KEYBODYFATT", bfatt); + paf2500f.remove(); // Cancella tutte le rate + + // Imposto i campi uguali per tutte le rate + paf2500f.set("PO_CONDPAGAMENTO", rateazione); // Condizione di pagamento PA + paf2500f.set("PO_CODICEPAGAM", pag.code()); // Condizione di pagamento CAMPO + + TString80 iban, istituto; + TString8 abi, cab; + if (get_bank(doc, iban, abi, cab, istituto)) + { + paf2500f.set("PO_ISTFINANZ", istituto); + paf2500f.set("PO_IBAN", iban); + paf2500f.set("PO_ABI", abi); + paf2500f.set("PO_CAB", cab); + } + + if (cab.blank()) + log(2, TR("Non sono presenti ABI, CAB, IBAN per il pagamento")); + else if (iban.blank()) + log(1, TR("Non è presente il codice IBAN per il pagamento")); + + for (int nr = 0; nr < nrate; nr++) + { + paf2500f.set("PO_RIGA", long(nr + 1)); // Numero rata +#ifdef DBG + bool tolla = true; + TString pop = cache().get("%CLR", pag.ulc_rata(nr < pag.n_rate() ? nr : 0), "S12"); + bool aaaa = true; +#endif + paf2500f.set("PO_MODALITAPAGAM", cache().get("%CLR", pag.ulc_rata(nr < pag.n_rate() ? nr : 0), "S12")); // Si assicura che il numero riga sia accettabile + + TToken_string& riga = scad.row(nr); // Data|Importo + paf2500f.set("PO_DATASCADENZA", TDate(riga.get(0))); // Data scadenza + paf2500f.set("PO_IMPORTO", real(riga.get())); // Importo rata + + paf2500f.set("PO_GESTIONE", "D"); + paf2500f.insert(); + } + + TPaf_record paf2600f("PAF2600F"); + paf2600f.set("PP_KEYHEADERFATT", hfatt); + paf2600f.set("PP_KEYBODYFATT", bfatt); + paf2600f.remove(); // Cancella eventuali allegati + TToken_string allegati(doc.get("COLL_GOLEM"), '\n'); + if (allegati.full()) + { + long nprogr = 0; // Numero di file allegati + TFilename fname; + FOR_EACH_TOKEN(allegati, row) + { + const TToken_string entry(row); + if (entry.get(0, fname) && fname.exist()) + { + static TString dest_path; + static TString dest_usr_path; + + dest_path.cut(0) << _def_fld << fname.name(); + dest_usr_path.cut(0) << _def_usr_fld << fname.name(); + + if(!fcopy(fname, dest_usr_path)) + { + if (yesno_box("Errore critico nel copiare il file %s, si desidera continuare?", fname.name())) + continue; + else + return false; + } + + // Provo a copiare il file + paf2600f.set("PP_NUMEROLINEA", ++nprogr); + paf2600f.set("PP_NOMEATTACHMENT", fname.name()); + paf2600f.set("PP_ATTACHMENT", dest_path); + fname.upper(); // serve estensione maiuscola + paf2600f.set("PP_FMTATTACHMENT", fname.ext()); + paf2600f.insert(); + } + } + const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); + /* + if(td.invio_xml()) + { + // Genero il pdf del documento e lo allego + + } + */ + } + + // + return true; +} + +bool TDoc2Paf::elabora(const TRectype& rec) +{ + TDocumentoEsteso doc; + if (doc.read(rec) == NOERR) + { + return elabora(doc) ? db().sq_commit() : db().sq_rollback(); + } + return false; +} + +bool TDoc2Paf::elabora(const TDoc_key& key) +{ + TRectype rec(LF_DOC); + rec.put(DOC_PROVV, key.provv()); + rec.put(DOC_ANNO, key.anno()); + rec.put(DOC_CODNUM, key.codnum()); + rec.put(DOC_NDOC, key.ndoc()); + return elabora(rec); +} + +bool TDoc2Paf::elabora(const TFilename& ini) +{ + TConfig cfg(ini, "33"); + const int anno = cfg.get_int(DOC_ANNO); + const long ndoc = cfg.get_long(DOC_NDOC); + const TFixed_string codnum(cfg.get(DOC_CODNUM)); // lascio sapientemente per ultima la get di una stringa + const TDoc_key key(anno, codnum, ndoc); + return elabora(key); +} + +/* +bool TDoc2Paf::genera_xml() +{ + #define PABASE "SiaggPA" + + TFilename tmp; + + // Copia eventuali protezioni software + TString_array files; + if (list_files(PABASE"/*.ssa", files) == 0) + { + list_files("*.ssa", files); + FOR_EACH_ARRAY_ROW(files, i, row) + { + tmp = PABASE; tmp.add(*row); + xvt_fsys_fupdate(*row, tmp); + } + } + files.destroy(); + if (list_files(PABASE"/*.ssa", files) != 1) + warning_box(FR("Nella cartella %s deve essere presente esattamente un file .ssa"), PABASE); + + TFilename home; + xvt_sys_get_env("USERPROFILE", home.get_buffer(), home.size()); + home.add("SoftwareSirio"); home.add(PABASE); + if (!dexist(home)) + make_dir(home); + + tmp = home; tmp.add("config.properties"); + xvt_fsys_fupdate(PABASE"/config.properties", tmp); + + tmp = home; tmp.add("configGUI.properties"); + xvt_fsys_fupdate(PABASE"/configGUI.properties", tmp); + + if (tmp.exist()) + { + TJava_profile prop(tmp); + if (prop.get("percorso").blank()) + prop.set("percorso", _dbname.path()); + prop.set("nomePAF", _dbname); + } + else + cantread_box(tmp); + + tmp = PABASE"\\SiaggPACAMPO.jar"; + tmp.make_absolute_path(); + + DIRECTORY old_dir; xvt_fsys_get_dir(&old_dir); + DIRECTORY new_dir; xvt_fsys_convert_str_to_dir(tmp.path(), &new_dir); + xvt_fsys_set_dir(&new_dir); + const bool good = goto_url(tmp); + if (good) + xvt_sys_sleep(3000); + else + error_box(FR("Impossibile eseguire Java -jar %s"), (const char*)tmp); + xvt_fsys_set_dir(&old_dir); + + return good; +} +*/ +void TDoc2Paf::main_loop() +{ + int ndocs = 0; + for (int a = 1; a < argc(); a++) + { + TFilename ini = argv(a); + if (ini.starts_with("-i", true) || ini.starts_with("/i", true)) + ini.ltrim(2); + if (ini.exist() && elabora(ini)) + ndocs++; + else + { + if (ini.find('*') >= 0 || ini.find('?') >= 0) + { + TString_array f; + list_files(ini, f); + FOR_EACH_ARRAY_ROW(f, r, row) + { + ini = *row; + if (ini.exist() && elabora(ini)) + ndocs++; + } + } + } + } + if (ndocs > 0) + { + show_log(); + //if (show_log()) + //genera_xml(); + return; + } + + TPA_mask mask; + mask.set(F_COFI, _cofi); + while (mask.run() == K_ENTER) + { + _cofi = mask.get(F_COFI); + + _def_fld = ini_get_string(CONFIG_DITTA, "fp", "flddest"); + if(!_def_fld.ends_with("\\")) + { + _def_fld << "\\"; + } + + _def_usr_fld = ini_get_string(CONFIG_DITTA, "fp", "fldusrdest", ""); + if(_def_usr_fld.empty()) + { + _def_usr_fld = _def_fld; + } + else if (!_def_fld.ends_with("\\")) + { + _def_usr_fld << "\\"; + } + + TString_array& sht = mask.sfield(F_DOCS).rows_array(); + if (!sht.empty()) + { + TProgress_monitor pi(sht.items(), NULL); + ndocs = 0; + FOR_EACH_ARRAY_ROW(sht, r, riga) + { + if (riga->starts_with("X")) + { + const int anno = riga->get_int(mask.sfield(F_DOCS).cid2index(S_ANNO)); + const long ndoc = riga->get_long(mask.sfield(F_DOCS).cid2index(S_NDOC)); + const TFixed_string codnum(riga->get(mask.sfield(F_DOCS).cid2index(S_CODNUM))); // lascio sapientemente per ultima la get di una stringa + const TDoc_key key(anno, codnum, ndoc); + if (elabora(key)) + ndocs++; + } + if (!pi.add_status(1)) + break; + } + message_box(FR("Sono stati elaborati %d documenti"), ndocs); + } + + if (ndocs > 0 && show_log()) + //genera_xml(); + return; + } +} + +bool TDoc2Paf::create() +{ + open_files(LF_TAB, LF_TABCOM, LF_TABMOD, LF_ANAG, + LF_CLIFO, LF_CFVEN, LF_CFBAN, LF_NDITTE, + LF_DOC, LF_RIGHEDOC, 0); + + TRectype cfven(LF_CFVEN); + if (cfven.type(CFV_PARIFAMM) != _alfafld) + return error_box(TR("Database non convertito per fatturazione P.A.")); + + _ditta.init(LF_NDITTE, prefix().get_codditta()); + + _cofi = ini_get_string(CONFIG_DITTA, "fp", "TRASMITTCOD"); + if (_cofi.blank()) + _cofi = _ditta.codice_fiscale(); + + return check_tables() && TSkeleton_application::create(); + +} + +bool TDoc2Paf::destroy() +{ + if (_cofi.full()) + ini_set_string(CONFIG_DITTA, "fp", "TRASMITTCOD", _cofi); + + db().sq_disconnect(); + return TSkeleton_application::destroy(); +} + +int fp0300(int argc, char* argv[]) +{ + TDoc2Paf d2p; + d2p.run(argc, argv, TR("Fatturazione P.A.")); + return 0; +} diff --git a/src/fp/fp0300.cpp~RF5235131.TMP b/src/fp/fp0300.cpp~RF5235131.TMP new file mode 100644 index 000000000..ee864dc15 --- /dev/null +++ b/src/fp/fp0300.cpp~RF5235131.TMP @@ -0,0 +1,1652 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../ve/velib05.h" +#include "../cg/cglib03.h" + +#include "fp0.h" +#include "fp0300a.h" + +#include "../fe/felib.h" +#include "fplib01.h" + +#include +#include +#include +#include +#include +#include +#include "../cg/cfban.h" + + +///////////////////////////////////////////////////////////////////////////////////// +// Globals +///////////////////////////////////////////////////////////////////////////////////// + + + +///////////////////////////////////////////////////////////////////////////////////// +// Utilities +///////////////////////////////////////////////////////////////////////////////////// + +/* + * HFATT: tipocf(1) + codcf(6) + * BFATT: datadoc(8) + tipodoc_SDI(4) + numdoc(7) + */ + +// Crea la coppia di chiavi per il db PAF a partire da un documento vero e proprio +static bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt) +{ + hfatt.cut(0); + if (doc.clifor().occasionale()) + hfatt << "O" << doc.get("OCFPI"); + else + hfatt << doc.clifor().tipo() << doc.clifor().codice(); + CHECK(hfatt.full(), "Destinatario fattura P.A. non valido"); + + const TCodice_numerazione& codnum = doc.codice_numerazione(); + const long ndoc = doc.numero(); + TString16 fullnumdoc; codnum.complete_num(ndoc, fullnumdoc); + + bfatt.cut(0) << doc.get_date(DOC_DATADOC).date2ansi() << '/' << doc.tipo().tipo_doc_sdi() << '/' << fullnumdoc; + return hfatt.full() && bfatt.full(); +} + +// Crea la coppia di chiavi per il db PAF a partire da un semplice record di testata documento +static bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt) +{ + TDocumento d(doc); + chiave_paf(d, hfatt, bfatt); + return hfatt.full(); +} + +// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h) +static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str) +{ + SLIST_ELT e = NULL; + for (e = xvt_slist_get_first(list); e; e = xvt_slist_get_next(list, e)) + { + const char* val = xvt_slist_get(list, e, NULL); + if (xvt_str_compare_ignoring_case(str, val) == 0) + break; + } + return e; +} + +// Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h) +bool xvt_fsys_fupdate(const char* src, const char* dst) +{ + bool ok = false; + if (xvt_fsys_file_exists(src)) + { + const long tsrc = xvt_fsys_file_attr(src, XVT_FILE_ATTR_MTIME); + if (tsrc > 0) + { + long tdst = 0; + if (xvt_fsys_file_exists(dst)) + tdst = xvt_fsys_file_attr(dst, XVT_FILE_ATTR_MTIME); + if (tsrc > tdst) + ok = xvt_fsys_fcopy(src, dst) != 0; + } + } + + return ok; +} + +///////////////////////////////////////////////////////////////////////////////////// +// TAncestor +///////////////////////////////////////////////////////////////////////////////////// + +struct TAncestor : public TObject +{ + TString20 _numdoc; + TDate _datadoc; + + TAncestor(const TRectype& rdoc); +}; + +TAncestor::TAncestor(const TRectype& rdoc) +{ + const int anno = rdoc.get_int(RDOC_ANNO); + const TString4 codnum = rdoc.get(RDOC_CODNUM); + const long ndoc = rdoc.get_long(RDOC_NDOC); + const TCodice_numerazione& num = cached_numerazione(codnum); + + TToken_string kdoc; + kdoc = rdoc.get(RDOC_PROVV); + kdoc.add(anno); + kdoc.add(codnum); + kdoc.add(ndoc); + const TRectype& doc = cache().get(LF_DOC, kdoc); + + TString16 numdoc; num.complete_num(ndoc, numdoc); + _numdoc.format("%d/%s/%s", anno, (const char*)codnum, (const char*)numdoc); + _datadoc = doc.get_date(DOC_DATADOC); +} + + +///////////////////////////////////////////////////////////////////////////////////// +// TPaf_record +///////////////////////////////////////////////////////////////////////////////////// + +// Contenitore di campi di un record di database SQLite +class TPaf_record : public TObject +{ + TString8 _table; + TToken_string _key; + TAssoc_array _fields; + +protected: + void copy(const TPaf_record& rec) { _table = rec._table; _key = rec._key; _fields = rec._fields; } + const TString& var2str(const TString& fld, const TVariant& var) const; + +public: + void reset() { _fields.destroy(); } + void set(const char* fld, const TVariant& var); + void set(const char* fld, long var); + void set(const char* fld, const char* var); + void set(const char* fld, const real& var); + void set(const char* fld, const TString& var); + void set(const char* fld, const TDate& var); + void set(const char* fld, bool var); + const TVariant& get(const char* fld) const; + + bool insert(); + bool remove(); + bool search(); + bool search(const char* k1, const char* k2, const char* k3 = NULL); + + virtual TObject* dup() const { return new TPaf_record(*this); } + virtual bool ok() const { return _table.not_empty(); } + + TPaf_record& operator=(const TPaf_record& rec) { copy(rec); return *this; } + TPaf_record(const TPaf_record& rec) { copy(rec); } + TPaf_record(const char* table); +}; + +// Imposta il valore di un campo variant +void TPaf_record::set(const char* fld, const TVariant& var) +{ + CHECK(fld && *fld, "Null field name"); + + if (var.is_null()) + { + _fields.remove(fld); + } + else + { + TVariant* obj = (TVariant*)_fields.objptr(fld); + if (obj != NULL) + *obj = var; + else + _fields.add(fld, new TVariant(var)); + } +} + +// Imposta il valore di un campo intero +void TPaf_record::set(const char* fld, long val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo stringa +void TPaf_record::set(const char* fld, const char* val) +{ + if (val == NULL) + set(fld, NULL_VARIANT); + else + { + const TVariant var(val); + set(fld, var); + } +} + +// Imposta il valore di un campo stringa +void TPaf_record::set(const char* fld, const TString& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo numerico +void TPaf_record::set(const char* fld, const real& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo data in formato ISO +void TPaf_record::set(const char* fld, const TDate& val) +{ + if (val.ok()) + { + const TVariant var(val); + set(fld, var); + } + else + set(fld, ""); +} + +// Imposta il valore di un campo booleano +void TPaf_record::set(const char* fld, bool var) +{ + set(fld, var ? "SI" : "NO"); +} + +// Legge il valore di un campo variant +const TVariant& TPaf_record::get(const char* fld) const +{ + const TVariant* var = (const TVariant*)_fields.objptr(fld); + return var ? *var : NULL_VARIANT; +} + +// Converte un variant in una stringa valida per SQLite +const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) const +{ + const TFieldtypes vt = var.type(); + if (vt == _realfld) + { + const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ")>0 || fldname.find("PREZZO")>0); + TString& tmp = get_tmp_string(); + tmp << '\'' << v.string() << '\''; tmp.replace(',','.'); + return tmp; + } + if (vt == _datefld) + { + TString& tmp = get_tmp_string(); + tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\''; + return tmp; + } + + const TString& str = var.as_string(); + + bool apici = vt == _alfafld; + if (apici && str[0] != '0' && real::is_natural(str)) + apici = false; + + if (!apici) + return str; + + TString& tmp = get_tmp_string(); + tmp = str; + for (int a = str.rfind('\''); a >= 0; a--) + { + if (tmp[a] == '\'') + tmp.insert("'", a); + } + tmp.insert("'", 0); + tmp << '\''; + return tmp; +} + +// Elimina il record in base ai campi chiave +bool TPaf_record::remove() +{ + TString256 query; + query << "DELETE FROM " << _table << " WHERE "; + int nkf = 0; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + if (nkf++ > 0) + query << " AND "; + query << fld << '=' << var2str(fld, var) ; + } + } + CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table); + query << ';'; + return db().sq_set_exec(query); +} + +// Callback per la sottostante funzione search() +static int paf_search_record(void* jolly, int cols, char** values, char** names) +{ + TPaf_record& rec = *(TPaf_record*)jolly; + for (int i = 0; i < cols; i++) + rec.set(names[i], values[i]); + return 0; +} + +// Carica un record in base ai campi chiave +bool TPaf_record::search() +{ + CHECKS(_fields.items() > 0, "Can't search with empty key on table ", static_cast(_table)); + TString256 query; + query << "SELECT * FROM " << _table << " WHERE "; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + query << fld << '=' << var2str(fld, var) << " AND "; + } + query.rtrim(5); + query << ';'; + + // return xvt_sql_execute(_db, query, paf_search_record, this) == 1; + // TODO: Valutare + return db().sq_set_exec(query); +} + +// Carica un record in base ad un massimo di 3 campi chiave +bool TPaf_record::search(const char* k1, const char* k2, const char* k3) +{ + _fields.destroy(); + + set(_key.get(0), k1); + set(_key.get(1), k2); + if (k3 && *k3) + set(_key.get(2), k3); + + return search(); +} + +// Aggiunge un record al db +bool TPaf_record::insert() +{ + CHECKS(_fields.items() > _key.items(), "Can't insert empty record on table ", _table); + + TString query, values; + query << "INSERT INTO " << _table << "\n("; + FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + query << fld << ','; + values << var2str(fld, var) << ','; + } + } + query.rtrim(1); values.rtrim(1); + query << ")\nVALUES (" << values << ");"; + return db().sq_set_exec(query); +} + +// Crea un record della tabella data ed imposta i nomi dei campi chiave +TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',') +{ + TString q; + q << "SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = '" << table << "' ORDER BY ORDINAL_POSITION"; + for (bool ok = db().sq_set_exec(q); ok; ok = db().sq_next()) + { + _key.add(db().sq_get("COLUMN_NAME")); + } + CHECKS(!_key.empty_items(), "Invalid primary key for table ", table); +} + +///////////////////////////////////////////////////////////////////////////////////// +// TPa_mask +///////////////////////////////////////////////////////////////////////////////////// + +class TPA_mask : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + + void fill(); + void init(); + bool is_fattura(const TRectype& doc) const; + +public: + TPA_mask() : TAutomask("fp0300a") { } +}; + +bool TPA_mask::is_fattura(const TRectype& doc) const +{ + const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); + if (!td.is_fattura()) // Tengo per buone solo le fatture e le note di credito + return false; + + const TCodice_numerazione& cn = cached_numerazione(doc.get(DOC_CODNUM)); + return cn.tipo() == 2 && !cn.get_bool("B10"); // Controlla se fattura provvisioria esclusa da P.A. +} + + +void TPA_mask::fill() +{ + TSheet_field& docs = sfield(F_DOCS); + TString_array& sht = docs.rows_array(); + docs.hide(); + + sht.destroy(); + + // Seleziona tutti i clienti che sono pubbliche amministrazioni (PADESTIN!='') + TString query; + query << "USE 17 SELECT PADESTIN!=''" + << "\nJOIN 20 INTO TIPOCF=TIPOCF CODCF==CODCF" + << "\nFROM TIPOCF=C\nTO TIPOCF=C"; + + TISAM_recordset clifo_pa(query); + const TRecnotype n = clifo_pa.items(); + if (n > 0) + { + const TDate dal = get(F_DATAINI); + const char filter_selected = get(F_FATTSEL)[0]; + + // Record di controllo per eventuali elaborazioni precedenti + TString hfatt(8), bfatt(20); + TPaf_record paf0100f("PAF0100F"); + + TProgress_monitor pi(n, NULL); + for (bool okc = clifo_pa.move_first(); okc; okc = clifo_pa.move_next()) + { + if (!pi.add_status()) + break; + + query.cut(0); + query << "USE 33 KEY 2\nSELECT (BETWEEN(STATO,2,8))"; + query << "\nFROM TIPOCF=C CODCF=#CLIENTE PROVV=D ANNO=" << dal.year() << " DATADOC=" << dal.date2ansi() + << "\nTO TIPOCF=C CODCF=#CLIENTE PROVV=D"; + TISAM_recordset doc_pa(query); + doc_pa.set_var("#CLIENTE", clifo_pa.get(CLI_CODCF)); + const TRectype& doc = doc_pa.cursor()->curr(); + for (bool okd = doc_pa.move_first(); okd; okd = doc_pa.move_next()) + { + const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC)); + if (!td.is_fattura() || td.tipo_doc_sdi().empty()) // Tengo per buone solo le fatture e le note di credito e che hanno il tipo doc SDI per l'invio + continue; + + bool sent = false; + if (chiave_paf(doc, hfatt, bfatt)) + { + if (paf0100f.search(NULL, hfatt, bfatt)) + { + sent = paf0100f.get("P1_GESTIONE").as_string() == "X"; + if (sent && !filter_selected) + continue; + } + } + + TToken_string* row = new TToken_string; + *row = sent ? " " : "X"; + row->add(doc_pa.get(DOC_ANNO).as_int(), 1); + row->add(doc_pa.get(DOC_CODNUM).as_string()); + row->add(td.tipo_doc_sdi()); + row->add(doc_pa.get(DOC_NDOC).as_int()); + row->add(doc_pa.get(DOC_DATADOC).as_date()); + row->add(clifo_pa.get(CFV_CODCF).as_int()); + row->add(clifo_pa.get("20." CLI_RAGSOC).as_string()); + row->add(clifo_pa.get(CFV_PADESTIN).as_string()); + row->add(clifo_pa.get(CFV_PARIFAMM).as_string()); + row->add(clifo_pa.get("20." CLI_COFI).as_string()); + row->add(!td.invio_xml() ? "X" : ""); + + bool split = clifo_pa.get("20." CLI_SPLITPAY).as_bool(); + if (split) + { + const long numreg = doc_pa.get(DOC_NUMREG).as_int(); + if (numreg > 0) + { + const TRectype& mov = cache().get(LF_MOV, numreg); + split = is_split_payment(mov); + } + } + row->add(split ? "X" : " "); + + const bool attach = !doc_pa.get("COLL_GOLEM").is_empty(); + row->add(attach ? "X" : " "); + + sht.add(row); + } + } + } + docs.force_update(); + docs.show(); +} + +bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_DATAINI: + if (e == fe_init) + o.set(ini_get_string(CONFIG_DITTA, "pa", "LastXML", "01-01-2018")); else + if (e == fe_modify) + fill(); else + if (e == fe_close) + ini_set_string(CONFIG_DITTA, "pa", "LastXML", o.get()); + break; + case F_SHOWALL: + if (e == fe_modify) + fill(); + break; + case F_DOCS: + if (e == fe_init) + fill(); + if (e == se_query_add || e == se_query_del) + return false; + break; + case DLG_USER: + if (e == fe_button && jolly > 0) + { + TSheet_field& docs = sfield(F_DOCS); + TToken_string& row = docs.row(docs.selected()); + TRectype doc(LF_DOC); + doc.put(DOC_PROVV, 'D'); + doc.put(DOC_ANNO, row.get(1)); + doc.put(DOC_CODNUM, row.get()); + doc.put(DOC_NDOC, row.get()); + if (doc.edit()) + fill(); + } + break; + case DLG_ALL: + { + if (e == fe_button) + { + TSheet_field& docs = sfield(F_DOCS); + TString_array& sht = docs.rows_array(); + const int items = sht.items(); + + if (items > 0) + { + const TString4 select = *(sht.row(0).get(0)) == 'X' ? "" : "X"; + for (int i = 0; i < items; i++) + sht.row(i).add(select, 0); + docs.force_update(); + } + } + } + break; + default: break; + } + return true; +} + +///////////////////////////////////////////////////////////////////////////////////// +// TDoc2Paf +///////////////////////////////////////////////////////////////////////////////////// + +class TDoc2Paf : public TSkeleton_application +{ + TAnagrafica _ditta; + TString16 _cofi; + TFilename _dbname; + TLog_report* _log; + TString _logpaf; + +private: + int parse_line(const TString& line, TString& var, TString& val) const; + bool create_table(TScanner& paf, const TString& table); + + const TRectype* find_parent_row(const TRectype& rdoc) const; + int find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const; + +protected: + bool parse_sconto(const TString& formula, TToken_string& sconti) const; + bool get_bnp_iban(const TString& abi, const TString& cab, int prg, TString& iban) const; + bool get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const; + const char* descrizione(const TRiga_documento& rdoc) const; + const TRectype& cco(const TRectype& doc) const; // Contratto/Convenzione/Offerta + + void log(int severity, const char* msg); + bool show_log(); + const char * natura(const TString& codiva) const; + void set_IVA(const TString& codiva, TPaf_record& paf) const; + void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const; + + bool elabora(TDocumentoEsteso& doc); + bool elabora(const TRectype& rec); + bool elabora(const TDoc_key& key); + bool elabora(const TFilename& ini); + //bool genera_xml(); + +public: + virtual bool create(); + virtual bool destroy(); + virtual void main_loop(); + + TDoc2Paf() : _log(NULL) {} +}; + +bool TDoc2Paf::parse_sconto(const TString& formula, TToken_string& sconti) const +{ + sconti.cut(0); + int start = 0; + for (int i = 0; ; i++) + { + const char c = formula[i]; + if (c == '+' || c == '-' || c < ' ') + { + if (i > 0) + { + TString8 tok = formula.sub(start, i); + tok.replace(',', '.'); + const real perc = tok; + if (!perc.is_zero()) + sconti.add(tok); + } + if (c < ' ') + break; + start = i; + } + } + return sconti.full(); +} + +bool TDoc2Paf::get_bnp_iban(const TString& abi, const TString& cab, int nprog, TString& iban) const +{ + TTable bnp("BNP"); + TString16 key; + key << abi << cab; + if (nprog > 0) + { + TString4 sprog; sprog.format("%02d", nprog); + key << sprog; + } + bnp.put("CODTAB", key); + int err = bnp.read(_isgteq); + if (err == NOERR && !bnp.get("CODTAB").starts_with(abi)) + err = _iskeynotfound; + if (err == NOERR) + iban = bnp.get("S3"); + + return err == NOERR; +} + +bool TDoc2Paf::get_bank(const TDocumento& doc, TString& iban, TString& abi, TString& cab, TString& istituto) const +{ + bool found = false; + abi = doc.get(DOC_CODABIP); + cab = doc.get(DOC_CODCABP); + int prg = doc.get_int(DOC_PROGBNP); + + found = abi.full() && cab.full(); + if (found) + get_bnp_iban(abi, cab, prg, iban); + + if (!found) // Se non trovo banca sul DOC la cerco su CFBAN + { + TToken_string key; + key.add("C"); key.add(doc.codcf()); key.add("N"); key.add(1); + const TRectype& cfban = cache().get(LF_CFBAN, key); + if (!cfban.empty()) + { + abi = cfban.get(CFBAN_ABI); + cab = cfban.get(CFBAN_CAB); + prg = cfban.get_int(CFBAN_PROGPR); + found = abi.full() && cab.full(); + iban = cfban.get(CFBAN_IBAN); + if (found && iban.blank()) + get_bnp_iban(abi, cab, prg, iban); + } + } + + if (!found) // Se non trovo banca su CFBAN la cerco su CFVEN + { + const TRectype& cfven = doc.clifor().vendite(); + abi = cfven.get(CFV_CODABIPR); + cab = cfven.get(CFV_CODCABPR); + found = abi.full() && cab.full(); + if (found) + get_bnp_iban(abi, cab, 0, iban); + } + + if (found) + istituto = cache().get("%BAN", abi, "S0"); + + return found; +} + +const char* TDoc2Paf::descrizione(const TRiga_documento& rdoc) const +{ + if (rdoc.get_bool(RDOC_DESCLUNGA)) + { + TString tmp; + tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST); + tmp.replace('\n', ' '); tmp.strip_double_spaces(); tmp.trim(); + TParagraph_string para(tmp, 100); + return para.get(0); + } + return rdoc.get(RDOC_DESCR); +} + +const TRectype* TDoc2Paf::find_parent_row(const TRectype& rdoc) const +{ + const long id = rdoc.get_long(RDOC_DAIDRIGA); + if (id > 0L) + { + TToken_string key; + key.add(rdoc.get(RDOC_DACODNUM)); + if (key.full()) + { + key.add(rdoc.get(RDOC_DAANNO)); + key.add(rdoc.get(RDOC_DAPROVV)); + key.add(rdoc.get(RDOC_DANDOC)); + for (int r = 0; ; r++) + { + if (r == 0) + key.add(id, 4); + else + key.add(r, 4); + const TRectype& rec = cache().get(LF_RIGHEDOC, key); + if (r > 0 && rec.empty()) + break; + if (rec.get_long(RDOC_IDRIGA) == id) + return &rec; + } + } + } + return NULL; +} + +int TDoc2Paf::find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const +{ + if (rdoc.is_articolo()) + { + for (const TRectype* prdoc = find_parent_row(rdoc); prdoc != NULL; prdoc = find_parent_row(*prdoc)) + { + const TCodice_numerazione& cn = cached_numerazione(prdoc->get(RDOC_CODNUM)); + const int td = cn.tipo(); + if (td > 0 && ancestors.objptr(td) == NULL) + ancestors.add(new TAncestor(*prdoc), td); + } + } + return ancestors.items(); +} + +const TRectype& TDoc2Paf::cco(const TRectype& doc) const +{ + TString80 conkey; + const TString& con = doc.get(DOC_CONTRATTO); + if (con.full()) + { + char tcon = doc.get_char(DOC_MODPAG); + if (tcon < 'C') tcon = 'C'; + conkey.format("%c%6ld%s", tcon, doc.get_long(DOC_CODCF), (const char*)con); + } + return cache().get("&CON", conkey); +} + +void TDoc2Paf::log(int severity, const char* msg) +{ + if (severity < 0) + { + _logpaf = msg; + } else + if (_log == NULL) + { + _log = new TLog_report; + if (_logpaf.full()) + { + TString txt; + txt << _logpaf << ": " << msg; + _log->log(severity, txt); + } + else + _log->log(severity, msg); + } +} + +bool TDoc2Paf::show_log() +{ + bool ok = true; + if (_log) + { + _log->preview(); + delete _log; + _log = NULL; + ok = noyes_box(TR("Si desidera procedere con la generazione file xml?")); + } + return ok; +} + + +const char * TDoc2Paf::natura(const TString& codiva) const +{ + const TRectype& ai = cache().get("%IVA", codiva); + TString & natura = get_tmp_string(4); + + natura = ai.get("S12"); + if(natura.blank()) + { + const int tipo_iva11 = ai.get_int("S2"); + const bool revcharge = tipo_iva11 >= 31 && tipo_iva11 <= 38; + const TString& tipo = ai.get("S1"); + const int tipo_vendite = ai.get_int("S7"); + + // N1 escluse ex art 15 + if (tipo_vendite == 5) + natura = "N5"; // regime del margine + else + if (revcharge) + natura = "N6"; // Inversione contabile (REVERSE CHARGE) + else + if (tipo == "NS") + natura = "N2"; // Non soggetto + else + if (tipo == "NI") + natura = "N3"; // Non imponibile + else + if (tipo == "ES") + natura = "N4"; // Esente + } + return natura; +} + +void TDoc2Paf::set_IVA(const TString& codiva, TPaf_record& paf) const +{ + const TRectype& ai = cache().get("%IVA", codiva); + const real aliquota = ai.get("R0"); + paf.set("PI_ALIQUOTAIVA", aliquota); + if (codiva.full()) + { + if (aliquota.is_zero()) + paf.set("PI_NATURA", natura(codiva)); + else + paf.set("PI_NATURA", ""); + } +} + +void TDoc2Paf::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const +{ + const TString8 codiva(rdoc.get(RDOC_CODIVA)); + const TRectype& ai = cache().get("%IVA", codiva); + const real aliquota = ai.get("R0"); + paf.set("PI_ALIQUOTAIVA", aliquota); + if (codiva.full()) + { + if (aliquota.is_zero()) + paf.set("PI_NATURA", natura(codiva)); + else + paf.set("PI_NATURA", ""); + } +} + + +bool TDoc2Paf::elabora(TDocumentoEsteso& doc) +{ + TString8 hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. o di 7 caratteri per un privato + TString20 bfatt; // Codice univoco di 20 caratteri del documento + if (!chiave_paf(doc, hfatt, bfatt)) + return false; + log(-1, bfatt); + + const TFirm& firm = prefix().firm(); + const char* const paese = "IT"; + TCausale caus = TCausale(doc.tipo().causale(), doc.anno()); + + // + TPaf_record paf0100f("PAF0100F"); + paf0100f.set("P1_KEYHEADERFATT", hfatt); + paf0100f.set("P1_KEYBODYFATT", bfatt); + paf0100f.remove(); + + paf0100f.set("P1_TRASMITTPAESE", paese); + paf0100f.set("P1_TRASMITTCOD", _cofi); + paf0100f.set("P1_PRGINVIO", ""); // Ci pensa SiAggPA + paf0100f.set("P1_FMTTRASMISS", "SDI11"); // SDI11 si usa dal 2015 per lo split payment (prima era SDI10) + + paf0100f.set("P1_CODDEST", hfatt); + TString80 tel; tel << firm.get(NDT_PTEL) << firm.get(NDT_TEL); + paf0100f.set("P1_TELEFONO", tel); + paf0100f.set("P1_MAIL", firm.get(NDT_MAIL)); + paf0100f.set("P1_GESTIONE", "D"); + paf0100f.insert(); + // + + // + TPaf_record paf0200f("PAF0200F"); + paf0200f.set("P2_KEYHEADERFATT", hfatt); + paf0200f.set("P2_KEYBODYFATT", bfatt); + paf0200f.remove(); + + if (_ditta.partita_IVA().full()) + { + paf0200f.set("P2_FISCIVAPAESE", paese); // Sempre IT + paf0200f.set("P2_FISCIVACOD", _ditta.partita_IVA()); + } + paf0200f.set("P2_CODFISCALE", _ditta.codice_fiscale()); + if (_ditta.fisica()) + { + paf0200f.set("P2_ANANOME", _ditta.nome()); + paf0200f.set("P2_ANACOGNOME", _ditta.cognome()); + } + else + { + paf0200f.set("P2_ANADENOMIN", _ditta.ragione_sociale()); + } + + const char* regime_fiscale = "RF01"; + if (doc.get_bool(DOC_IVAXCASSA)) + { + // Supponiamo volume d'affari > 200000, altrimenti sarebbe RF17 + regime_fiscale = "RF16"; + } + paf0200f.set("P2_REGFISCALE", regime_fiscale); + + // DatiSede + paf0200f.set("P2_SEDEIND", _ditta.via_residenza()); + paf0200f.set("P2_SEDENRCIVICO", _ditta.civico_residenza()); + paf0200f.set("P2_SEDECAP", _ditta.CAP_residenza()); + paf0200f.set("P2_SEDECOMUNE", _ditta.comune_residenza()); + paf0200f.set("P2_SEDEPROV", _ditta.provincia_residenza()); + paf0200f.set("P2_SEDENAZ", paese); + paf0200f.set("P2_GESTIONE", "D"); + + TAnagrafica cliente(doc.clifor()); + + TString rifamm = cco(doc).get("S4"); + if (rifamm.blank()) + rifamm = doc.clifor().vendite().get(CFV_PARIFAMM); + paf0200f.set("P2_RIFAMMINISTR", rifamm); + + TISAM_recordset unloc("USE UNLOC\nJOIN COMUNI INTO COM==COMCCIAA\nFROM CODDITTA=#DITTA\nTO CODDITTA=#DITTA"); + unloc.set_var("#DITTA", firm.get(NDT_CODDITTA)); + if (unloc.move_first()) + { + const TString& numrea = unloc.get(ULC_NUMCCIAA).as_string(); + if (numrea.full()) + { + paf0200f.set("P2_ISCRREANUM", numrea); + paf0200f.set("P2_ISCRREAUFF", unloc.get("13->" COM_PROVCOM)); + } + } + + if (_ditta.giuridica()) + { + TISAM_recordset anagiu("USE ANAGIU\nFROM CODANAGR=#CODICE\nTO CODANAGR=#CODICE"); + anagiu.set_var("#CODICE", firm.get(NDT_CODANAGR)); + if (anagiu.move_first()) + { + paf0200f.set("P2_ISCRREACAP", anagiu.get(ANG_CAPSOC)); + const int ss = anagiu.get(ANG_STATOSOC).as_int(); + paf0200f.set("P2_ISCRREASLIQUID", (ss==2 || ss==3) ? "LS" : "LN"); + } + } + else + paf0200f.set("P2_ISCRREASLIQUID", "LN"); + + paf0200f.insert(); + + // + + // + + TPaf_record paf0400f("PAF0400F"); + paf0400f.set("P4_KEYHEADERFATT", hfatt); + paf0400f.set("P4_KEYBODYFATT", bfatt); + paf0400f.remove(); + + if (cliente.partita_IVA().full()) + { + paf0400f.set("P4_FISCIVAPAESE", paese); + paf0400f.set("P4_FISCIVACOD", cliente.partita_IVA()); + } + paf0400f.set("P4_CODFISC", cliente.codice_fiscale()); + + if (cliente.fisica()) + { + paf0400f.set("P4_ANANOME", cliente.nome()); + paf0400f.set("P4_ANACOGNOME", cliente.cognome()); + } + else + { + paf0400f.set("P4_ANADENOM", cliente.ragione_sociale()); + } + + // DatiSede + paf0400f.set("P4_SEDEIND", cliente.via_residenza()); + paf0400f.set("P4_SEDENRCIVICO", cliente.civico_residenza()); + paf0400f.set("P4_SEDECAP", cliente.CAP_residenza()); + paf0400f.set("P4_SEDECOMUNE", cliente.comune_residenza()); + paf0400f.set("P4_SEDEPROV", cliente.provincia_residenza()); + paf0400f.set("P4_SEDENAZ", "IT"); + paf0400f.set("P4_GESTIONE", "D"); + paf0400f.insert(); + // + + // + TPaf_record paf0700f("PAF0700F"); + paf0700f.set("P7_KEYHEADERFATT", hfatt); + paf0700f.set("P7_KEYBODYFATT", bfatt); + paf0700f.remove(); + paf0700f.set("P7_TIPODOC", doc.is_nota_credito() ? "TD04" : "TD01"); + paf0700f.set("P7_DIVISA", "EUR"); // Aggiungere codice ISO 4217 a tabella divise (%VAL) + paf0700f.set("P7_DATA", doc.data()); + + const TCodice_numerazione& codnum = doc.codice_numerazione(); + TString20 numdoc; codnum.complete_num(doc.numero(), numdoc); + paf0700f.set("P7_NUMERO", numdoc); + paf0700f.set("P7_GESTIONE", "D"); + paf0700f.insert(); + + // + TPaf_record paf0900f("PAF0900F"); + paf0900f.set("P9_KEYHEADERFATT", hfatt); + paf0900f.set("P9_KEYBODYFATT", bfatt); + paf0900f.remove(); + + TString80 sconto_expr = doc.get(DOC_SCONTOPERC); + TToken_string sconti; + if (parse_sconto(sconto_expr, sconti)) + { + long nlin_sconto = 0; + FOR_EACH_TOKEN(sconti, str) + { + const real sconto = str; + if (!sconto.is_zero()) // Precauzione inutile + { + paf0900f.set("P9_RIFNUMLINEA", ++nlin_sconto); + if (sconto > ZERO) + { + paf0900f.set("P9_TIPOSCONTO", "SC"); + paf0900f.set("P9_PERCSCONTO", sconto); + } + else + { + paf0900f.set("P9_TIPOSCONTO", "MG"); + paf0900f.set("P9_PERCSCONTO", -sconto); + } + paf0900f.set("P9_GESTIONE", "D"); + paf0900f.insert(); + } + } + } + // + + // + TPaf_record paf2700f("PAF2700F"); + paf2700f.set("PQ_KEYHEADERFATT", hfatt); + paf2700f.set("PQ_KEYBODYFATT", bfatt); + paf2700f.remove(); + paf2700f.set("PQ_IMPTOTDOC", doc.totale_doc()); + + const TRectype& cont_conv_off = cco(doc); + TString causale = cont_conv_off.get("S1"); + if (causale.full()) + { + causale << ' ' << cont_conv_off.get("S2"); + causale << ' ' << cont_conv_off.get("S3"); + causale.strip_double_spaces(); + causale.cut(200); + } + else + causale = doc.tipo().descrizione(); + paf2700f.set("PQ_CAUSALE", causale); + // paf2700f.set("PQ_ART73", true); + paf2700f.set("PQ_GESTIONE", "D"); + paf2700f.insert(); + // + + // Azzera contratti + TPaf_record paf1000f("PAF1000F"); + paf1000f.set("P0_KEYHEADERFATT", hfatt); + paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.remove(); + + // Azzera convenzioni + TPaf_record paf1100f("PAF1100F"); + paf1100f.set("PA_KEYHEADERFATT", hfatt); + paf1100f.set("PA_KEYBODYFATT", bfatt); + paf1100f.remove(); + + // Azzera ordini + TPaf_record paf1200f("PAF1200F"); + paf1200f.set("PB_KEYHEADERFATT", hfatt); + paf1200f.set("PB_KEYBODYFATT", bfatt); + paf1200f.remove(); + + // Azzera DDT + TPaf_record paf1600f("PAF1600F"); + paf1600f.set("PF_KEYHEADERFATT", hfatt); + paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.remove(); + + const TString16 cup = doc.get(DOC_CUP); + const TString16 cig = doc.get(DOC_CIG); + const TString80 com = doc.get(DOC_CODCMS); + + TString80 con = doc.get(DOC_CONTRATTO); + if (con.full() || cup.full() || cig.full()) + { + char tcon = doc.get_char(DOC_MODPAG); + if (tcon < 'C') tcon = 'C'; + + TDate datadoc; // Data contratto non obbligatoria + if (con.full()) + { + datadoc = cco(doc).get_date("D0"); + } + else + { + // IdDocumento obbligatorio + con = cig; + if (con.blank()) + con = cup; + } + + if (tcon == 'O') + { + paf1000f.set("P0_RIFNUMLINEA", 0L); + paf1000f.set("P0_IDDOC", con); + paf1000f.set("P0_DATADOC", datadoc); + paf1000f.set("P0_COMMCONVENZ", com); + paf1000f.set("P0_CODCUP", cup); + paf1000f.set("P0_CODCIG", cig); + paf1000f.set("P0_GESTIONE", "D"); + paf1000f.insert(); + } else + if (tcon == 'C') + { + paf1100f.set("PA_RIFNUMLINEA", 0L); + paf1100f.set("PA_IDDOC", con); + paf1100f.set("PA_DATADOCU", datadoc); + paf1100f.set("PA_COMMCONVENZ", com); + paf1100f.set("PA_CODCUP", cup); + paf1100f.set("PA_CODCIG", cig); + paf1000f.set("PA_GESTIONE", "D"); + paf1100f.insert(); + } + else + { + paf1200f.set("PB_RIFNUMLINEA", 0L); + paf1200f.set("PB_IDDOC", con); + paf1200f.set("PB_DATADOCO", datadoc); + paf1200f.set("PB_COMMCONVENZ", com); + paf1200f.set("PB_CODCUP", cup); + paf1200f.set("PB_CODCIG", cig); + paf1200f.set("PB_GESTIONE", "D"); + paf1200f.insert(); + } + } + + if (cup.blank() && cig.blank()) + log(1, "CIG e CUP assenti"); + + // + + TPaf_record paf1800f("PAF1800F"); + paf1800f.set("PI_KEYHEADERFATT", hfatt); + paf1800f.set("PI_KEYBODYFATT", bfatt); + paf1800f.remove(); // Cancella tutte le righe documento + + TPaf_record paf2000f("PAF2000F"); + paf2000f.set("PJ_KEYHEADERFATT", hfatt); + paf2000f.set("PJ_KEYBODYFATT", bfatt); + paf2000f.remove(); // Cancella tutti gli sconti di riga + + long riga = 0; + TString16 codivadefault; + { + FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) + { + codivadefault = rdoc->get(RDOC_CODIVA); + if (codivadefault.full()) + break; + } + } + FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) + { + paf1800f.reset(); + paf1800f.set("PI_KEYHEADERFATT", hfatt); + paf1800f.set("PI_KEYBODYFATT", bfatt); + paf1800f.set("PI_NUMEROLINEA", ++riga); + paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc)); +// paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione + + + set_IVA(codivadefault, paf1800f); + + if (rdoc->is_merce()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + const real qta = rdoc->get(RDOC_QTA); + if (qta.is_zero()) + { + TString msg; msg.format("La riga merce %d ha quantità nulla", riga); + log(1, msg); + } + if (qta >= ZERO) + { + paf1800f.set("PI_QUANTITA", qta); + paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false)); + } + else + { + paf1800f.set("PI_QUANTITA", -qta); + paf1800f.set("PI_PREZZOUNIT", -rdoc->prezzo(true, false)); + } + paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false)); + set_IVA(*rdoc, paf1800f); + + /* + const TDate data = doc.get(DOC_DATADOC); + paf1800f.set("PI_DTINIZIOPER", data); + paf1800f.set("PI_DTFINEPER", data); + */ + + // + + sconto_expr = rdoc->get(RDOC_SCONTO); + if (parse_sconto(sconto_expr, sconti)) + { + long nlin_sconto = 0; + FOR_EACH_TOKEN(sconti, str) + { + const real perc = str; + if (!perc.is_zero()) + { + paf2000f.set("PJ_KEYNLINEA", (long)r); + paf2000f.set("PJ_KEYNPROGR", ++nlin_sconto); + if (perc > ZERO) + { + paf2000f.set("PJ_TIPOSCONTO", "SC"); + paf2000f.set("PJ_PERCSCONTO", perc); + } + else + { + paf2000f.set("PJ_TIPOSCONTO", "MG"); + paf2000f.set("PJ_PERCSCONTO", -perc); + } + paf2000f.set("PJ_GESTIONE", "D"); + paf2000f.insert(); + } + } + } + // + + TArray ancestors; find_ancestors(*rdoc, ancestors); + for (int i = ancestors.last(); i > 0; i = ancestors.pred(i)) + { + const TAncestor& a = (const TAncestor&)ancestors[i]; + if (i == 1) + { + TPaf_record paf1600f("PAF1600F"); + paf1600f.reset(); + paf1600f.set("PF_KEYHEADERFATT", hfatt); + paf1600f.set("PF_KEYBODYFATT", bfatt); + paf1600f.set("PF_RIFNUMLINEA", (long)r); + paf1600f.set("PF_NUMDDDT", a._numdoc); + paf1600f.set("PF_DATADDT", a._datadoc); + paf1600f.set("PF_GESTIONE", "D"); + paf1600f.insert(); + } else + if (i == 3) + { + TPaf_record paf1000f("PAF1000F"); + paf1000f.set("P0_KEYHEADERFATT", hfatt); + paf1000f.set("P0_KEYBODYFATT", bfatt); + paf1000f.set("P0_RIFNUMLINEA", (long)r); + paf1000f.set("P0_IDDOC", a._numdoc); + paf1000f.set("P0_DATADOC", a._datadoc); + paf1000f.set("P0_COMMCONVENZ", com); + paf1000f.set("P0_CODCUP", cup); + paf1000f.set("P0_CODCIG", cig); + paf1000f.set("P0_GESTIONE", "D"); + paf1000f.insert(); + } + } + } else + if (rdoc->is_spese()) + { + const TSpesa_prest& sp = rdoc->spesa(); + const real imp = rdoc->importo(true, false); + real qta = UNO; + if (sp.is_tipo()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + qta = rdoc->get_real(RDOC_QTA); + if (qta.is_zero()) + { + TString msg; msg.format("La riga spese a quantità %d ha quantità nulla (campo %s)", riga, (const char*)rdoc->field_qta()); + log(1, msg); + qta = UNO; + } + paf1800f.set("PI_QUANTITA", qta); + } + real prz = imp; + if (qta != UNO) + { + prz = rdoc->prezzo(true, false); + if (prz.is_zero() && !imp.is_zero()) + { + const TPrice price(imp / qta); + prz = price.get_value(); + } + } + paf1800f.set("PI_PREZZOUNIT", prz); + paf1800f.set("PI_PRZTOTALE", imp); + set_IVA(*rdoc, paf1800f); + } else + if (rdoc->is_prestazione()) + { + paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); + real qta = rdoc->get(RDOC_QTA); if (qta.is_zero()) qta = UNO; + paf1800f.set("PI_QUANTITA", qta); + paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false)); + paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false)); + set_IVA(*rdoc, paf1800f); + } + + paf1800f.set("PI_GESTIONE", "D"); + paf1800f.insert(); + } + // + + // + TPaf_record paf2200f("PAF2200F"); + paf2200f.set("PL_KEYHEADERFATT", hfatt); + paf2200f.set("PL_KEYBODYFATT", bfatt); + paf2200f.remove(); // Cancella tutte le righe di riepilogo IVA + + const char* eiva = "I"; // Esigibilità IVA: Immediata, Differita, Split payment + if (doc.is_split_payment()) + eiva = "S"; else + if (doc.get_bool(DOC_LIQDIFF) || doc.get_bool(DOC_IVAXCASSA)) + eiva = "D"; + + long num_riep = 0; + TAssoc_array& tiva = doc.tabella_iva(false); + FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm) + { + const TRiepilogo_iva& riva = *(const TRiepilogo_iva*)itm; + const real aliquota = riva.cod_iva().percentuale(); + paf2200f.set("PL_KEYNPROGR", ++num_riep); + paf2200f.set("PL_ALIQUOTAIVA", aliquota); + if (aliquota.is_zero()) + paf2200f.set("PL_NATURA", natura(riva.cod_iva().codice())); + + paf2200f.set("PL_IMPONIBILE", riva.imponibile()); + paf2200f.set("PL_IMPOSTA", riva.imposta()); + paf2200f.set("PL_ESIGIVA", eiva); + if (*eiva == 'S') + paf2200f.set("PL_RIFNORMATIVO", "Scissione pagamenti art.17-ter DPR 633/72"); + else + paf2200f.set("PL_RIFNORMATIVO", riva.cod_iva().descrizione()); + paf2200f.set("PL_GESTIONE", "D"); + paf2200f.insert(); + } + // + + // + TPaf_record paf2400f("PAF2400F"); + paf2400f.set("PN_KEYHEADERFATT", hfatt); + paf2400f.set("PN_KEYBODYFATT", bfatt); + paf2400f.remove(); // Cancella i dati pagamento + + TPagamento& pag = doc.pagamento(); + doc.scadenze_recalc(); // Ricalcola array delle rate + TString_array& scad = doc.scadenze(); + const int nrate = scad.items(); // Conta rate generate + const char* rateazione = nrate > 1 ? "TP01" : "TP02"; // A rate (TP01) o una soluzione(TP02)? + paf2400f.set("PN_CONDPAGAMENTO", rateazione); + paf2400f.set("PN_GESTIONE", "D"); + paf2400f.insert(); + + TPaf_record paf2500f("PAF2500F"); + paf2500f.set("PO_KEYHEADERFATT", hfatt); + paf2500f.set("PO_KEYBODYFATT", bfatt); + paf2500f.remove(); // Cancella tutte le rate + + // Imposto i campi uguali per tutte le rate + paf2500f.set("PO_CONDPAGAMENTO", rateazione); // Condizione di pagamento PA + paf2500f.set("PO_CODICEPAGAM", pag.code()); // Condizione di pagamento CAMPO + + TString80 iban, istituto; + TString8 abi, cab; + if (get_bank(doc, iban, abi, cab, istituto)) + { + paf2500f.set("PO_ISTFINANZ", istituto); + paf2500f.set("PO_IBAN", iban); + paf2500f.set("PO_ABI", abi); + paf2500f.set("PO_CAB", cab); + } + + if (cab.blank()) + log(2, TR("Non sono presenti ABI, CAB, IBAN per il pagamento")); else + if (iban.blank()) + log(1, TR("Non è presente il codice IBAN per il pagamento")); + + for (int nr = 0; nr < nrate; nr++) + { + paf2500f.set("PO_KEYNPROGR", long(nr+1)); // Numero rata + + const char* mod_pag = "MP01"; // Modalità di pagamento + const int n = nr < pag.n_rate() ? nr : 0; // Si assicura che il numero riga sia accettabile + switch (pag.tipo_rata(n)) + { + case _bonfico: mod_pag = "MP05"; break; // bonifico + case _rid : mod_pag = "MP09"; break; // RID + case _ric_ban: mod_pag = "MP12"; break; // RIBA + default : mod_pag = "MP01"; break; // contanti + } + paf2500f.set("PO_MODALITAPAGAM", mod_pag); + + TToken_string& riga = scad.row(nr); // Data|Importo + paf2500f.set("PO_DATASCADENZA", TDate(riga.get(0))); // Data scadenza + paf2500f.set("PO_IMPORTO", real(riga.get())); // Importo rata + + paf2500f.set("PO_GESTIONE", "D"); + paf2500f.insert(); + } + + TPaf_record paf2600f("PAF2600F"); + paf2600f.set("PP_KEYHEADERFATT", hfatt); + paf2600f.set("PP_KEYBODYFATT", bfatt); + paf2600f.remove(); // Cancella eventuali allegati + TToken_string allegati(doc.get("COLL_GOLEM"),'\n'); + if (allegati.full()) + { + long nprogr = 0; // Numero di file allegati + TFilename fname; + FOR_EACH_TOKEN(allegati, row) + { + const TToken_string entry(row); + if (entry.get(0, fname) && fname.exist()) + { + paf2600f.set("PP_KEYNPROGR", ++nprogr); + paf2600f.set("PP_NOMEATTACHMENT", fname.name()); + paf2600f.set("PP_ATTACHMENT", fname); + fname.upper(); // serve estensione maiuscola + paf2600f.set("PP_FMTATTACHMENT", fname.ext()); + paf2600f.insert(); + } + } + } + + // + + return true; +} + +bool TDoc2Paf::elabora(const TRectype& rec) +{ + TDocumentoEsteso doc; + if (doc.read(rec) == NOERR) + { + return elabora(doc) ? db().sq_commit() : db().sq_rollback(); + } + return false; +} + +bool TDoc2Paf::elabora(const TDoc_key& key) +{ + TRectype rec(LF_DOC); + rec.put(DOC_PROVV, key.provv()); + rec.put(DOC_ANNO, key.anno()); + rec.put(DOC_CODNUM, key.codnum()); + rec.put(DOC_NDOC, key.ndoc()); + return elabora(rec); +} + +bool TDoc2Paf::elabora(const TFilename& ini) +{ + TConfig cfg(ini, "33"); + const int anno = cfg.get_int(DOC_ANNO); + const long ndoc = cfg.get_long(DOC_NDOC); + const TFixed_string codnum(cfg.get(DOC_CODNUM)); // lascio sapientemente per ultima la get di una stringa + const TDoc_key key(anno, codnum, ndoc); + return elabora(key); +} + +/* +bool TDoc2Paf::genera_xml() +{ + #define PABASE "SiaggPA" + + TFilename tmp; + + // Copia eventuali protezioni software + TString_array files; + if (list_files(PABASE"/*.ssa", files) == 0) + { + list_files("*.ssa", files); + FOR_EACH_ARRAY_ROW(files, i, row) + { + tmp = PABASE; tmp.add(*row); + xvt_fsys_fupdate(*row, tmp); + } + } + files.destroy(); + if (list_files(PABASE"/*.ssa", files) != 1) + warning_box(FR("Nella cartella %s deve essere presente esattamente un file .ssa"), PABASE); + + TFilename home; + xvt_sys_get_env("USERPROFILE", home.get_buffer(), home.size()); + home.add("SoftwareSirio"); home.add(PABASE); + if (!dexist(home)) + make_dir(home); + + tmp = home; tmp.add("config.properties"); + xvt_fsys_fupdate(PABASE"/config.properties", tmp); + + tmp = home; tmp.add("configGUI.properties"); + xvt_fsys_fupdate(PABASE"/configGUI.properties", tmp); + + if (tmp.exist()) + { + TJava_profile prop(tmp); + if (prop.get("percorso").blank()) + prop.set("percorso", _dbname.path()); + prop.set("nomePAF", _dbname); + } + else + cantread_box(tmp); + + tmp = PABASE"\\SiaggPACAMPO.jar"; + tmp.make_absolute_path(); + + DIRECTORY old_dir; xvt_fsys_get_dir(&old_dir); + DIRECTORY new_dir; xvt_fsys_convert_str_to_dir(tmp.path(), &new_dir); + xvt_fsys_set_dir(&new_dir); + const bool good = goto_url(tmp); + if (good) + xvt_sys_sleep(3000); + else + error_box(FR("Impossibile eseguire Java -jar %s"), (const char*)tmp); + xvt_fsys_set_dir(&old_dir); + + return good; +} +*/ +void TDoc2Paf::main_loop() +{ + int ndocs = 0; + for (int a = 1; a < argc(); a++) + { + TFilename ini = argv(a); + if (ini.starts_with("-i", true) || ini.starts_with("/i", true)) + ini.ltrim(2); + if (ini.exist() && elabora(ini)) + ndocs++; + else + { + if (ini.find('*') >= 0 || ini.find('?') >= 0) + { + TString_array f; list_files(ini, f); + FOR_EACH_ARRAY_ROW(f, r, row) + { + ini = *row; + if (ini.exist() && elabora(ini)) + ndocs++; + } + } + } + } + if (ndocs > 0) + { + show_log(); + //if (show_log()) + //genera_xml(); + return; + } + + TPA_mask mask; + mask.set(F_COFI, _cofi); + while (mask.run() == K_ENTER) + { + _cofi = mask.get(F_COFI); + + TString_array& sht = mask.sfield(F_DOCS).rows_array(); + if (!sht.empty()) + { + TProgress_monitor pi(sht.items(), NULL); + ndocs = 0; + FOR_EACH_ARRAY_ROW(sht, r, riga) + { + if (riga->starts_with("X")) + { + const int anno = riga->get_int(1); + const long ndoc = riga->get_long(3); + const TFixed_string codnum(riga->get(2)); // lascio sapientemente per ultima la get di una stringa + const TDoc_key key(anno, codnum, ndoc); + if (elabora(key)) + ndocs++; + } + if (!pi.add_status(1)) + break; + } + message_box(FR("Sono stati elaborati %d documenti"), ndocs); + } + + if (ndocs > 0 && show_log()) + //genera_xml(); + return; + } +} + +bool TDoc2Paf::create() +{ + open_files(LF_TAB, LF_TABCOM, LF_TABMOD, LF_ANAG, + LF_CLIFO, LF_CFVEN, LF_CFBAN, LF_NDITTE, + LF_DOC, LF_RIGHEDOC, 0); + + TRectype cfven(LF_CFVEN); + if (cfven.type(CFV_PARIFAMM) != _alfafld) + return error_box(TR("Database non convertito per fatturazione P.A.")); + + _ditta.init(LF_NDITTE, prefix().get_codditta()); + + _cofi = ini_get_string(CONFIG_DITTA, "pa", "TRASMITTCOD"); + if (_cofi.blank()) + _cofi = _ditta.codice_fiscale(); + + return check_tables() && TSkeleton_application::create(); +} + +bool TDoc2Paf::destroy() +{ + if (_cofi.full()) + ini_set_string(CONFIG_DITTA, "pa", "TRASMITTCOD", _cofi); + + db().sq_disconnect(); + return TSkeleton_application::destroy(); +} + +int fp0300(int argc, char* argv[]) +{ + TDoc2Paf d2p; + d2p.run(argc, argv, TR("Fatturazione P.A.")); + return 0; +} diff --git a/src/fp/fp0300a.h b/src/fp/fp0300a.h new file mode 100644 index 000000000..edf4ab1d1 --- /dev/null +++ b/src/fp/fp0300a.h @@ -0,0 +1,26 @@ +#define START_MASK 301 +#define F_DATAINI 301 +#define F_DATAEND 302 +#define F_FATTSEL 303 +#define F_COFI 304 +#define F_DATIPODOC 305 +#define F_ATIPODOC 306 +#define END_MASK 399 + +#define F_DOCS 201 + +#define S_SELECTED 101 +#define S_ANNO 102 +#define S_CODNUM 103 +#define S_TIPODOC 104 +#define S_CODSDI 105 +#define S_NDOC 106 +#define S_DATADOC 107 +#define S_CLIENTE 108 +#define S_RAGSOC 109 +#define S_UFFICIO 110 +#define S_RIFAMM 111 +#define S_COFI 112 +#define S_SPLITPAY 113 +#define S_ATTACH 114 +#define S_ONLYGEN 115 diff --git a/src/fp/fp0300a.uml b/src/fp/fp0300a.uml new file mode 100644 index 000000000..b37f449f5 --- /dev/null +++ b/src/fp/fp0300a.uml @@ -0,0 +1,223 @@ +#include "fp0300a.h" + +TOOLBAR "topbar" 0 0 0 2 + +#include +ENDPAGE + +PAGE "Fatture Pubblica Amministrazione" 0 2 0 0 + +DATE F_DATAINI +BEGIN + PROMPT 1 0 "Data iniziale" + CHECKTYPE REQUIRED +END + +DATE F_DATAEND +BEGIN + PROMPT 30 0 "Data finale" + VALIDATE DATE_CMP_FUNC >= F_DATAINI + WARNING "La data finale non può essere minore della data iniziale" + CHECKTYPE REQUIRED +END + +RADIOBUTTON F_FATTSEL 25 +BEGIN + PROMPT 1 1 "Fatture da visualizzare" + ITEM "|Da inviare" + ITEM "P|Pronte" + ITEM "X|XML Generato" + ITEM "E|In errore" + ITEM "N|Accettate" +END + +STRING F_COFI 16 +BEGIN + PROMPT 30 1 "Codice fiscale trasmittente " + CHECKTYPE REQUIRED +END + +STRING F_DATIPODOC 4 +BEGIN + PROMPT 30 2 "Da tipo doc " + FIELD TIPODOC + HELP "Codice tipo documento" + USE %TIP + SELECT S12!="" + INPUT CODTAB F_DATIPODOC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Tipo SDI@10" S12 + OUTPUT F_DATIPODOC CODTAB + CHECKTYPE FORCED + FLAG "UP" +END + +STRING F_ATIPODOC 4 +BEGIN + PROMPT 30 3 "A tipo doc " + FIELD TIPODOC + HELP "Codice tipo documento" + USE %TIP + SELECT S12!="" + INPUT CODTAB F_ATIPODOC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Tipo SDI@10" S12 + OUTPUT F_ATIPODOC CODTAB + CHECKTYPE FORCED + FLAG "UP" +END + +STRING DLG_PROFILE 256 +BEGIN + PROMPT 1 -1 "Profilo " + PSELECT + FLAGS "H" +END + +ENDPAGE + +PAGE "Elenco Fatture" 0 2 0 0 + +SPREADSHEET F_DOCS +BEGIN + PROMPT 0 2 "" + ITEM "@1" + ITEM "Anno" + ITEM "Cod.\nNum.@4" + ITEM "Tipo\nDoc@4" + ITEM "Tipo SDI@4" + ITEM "Num.\nDoc.@7" + ITEM "Data\nDoc.@10" + ITEM "Cliente" + ITEM "Ragione Sociale@50" + ITEM "Codice destinatario" + ITEM "Riferimento\nAmministrazione@20" + ITEM "Codice Fiscale@16" + ITEM "Scissione\nPagamenti@9" + ITEM "Allegati" + ITEM "Solo generazione" +END + +ENDPAGE + +ENDMASK + +PAGE "Documento" -1 -1 78 9 + +BOOLEAN S_SELECTED +BEGIN + PROMPT 1 1 "Da elaborare" +END + +NUMBER S_ANNO 4 +BEGIN + PROMPT 1 2 "Anno " + FLAGS "D" +END + +STRING S_CODNUM 4 +BEGIN + PROMPT 21 2 "Numerazione " + FLAGS "D" +END + +STRING S_TIPODOC 4 +BEGIN + PROMPT 21 2 "Tipo Documento " + FLAGS "D" +END + +STRING S_CODSDI 4 +BEGIN + PROMPT 41 2 "Tipo SDI " + FLAGS "D" +END + +NUMBER S_NDOC 7 +BEGIN + PROMPT 1 3 "Numero " + FLAGS "D" +END + +DATE S_DATADOC +BEGIN + PROMPT 21 3 "Data " + FLAGS "D" +END + +NUMBER S_CLIENTE 6 +BEGIN + PROMPT 1 4 "Cliente " + FLAGS "D" +END + +STRING S_RAGSOC 50 +BEGIN + PROMPT 21 4 "" + FLAGS "D" +END + +STRING S_UFFICIO 6 +BEGIN + PROMPT 1 5 "" + FLAGS "D" +END + +STRING S_RIFAMM 20 +BEGIN + PROMPT 21 5 "" + FLAGS "D" +END + +STRING S_COFI 20 +BEGIN + PROMPT 1 6 "" + FLAGS "D" +END + +BOOLEAN S_SPLITPAY +BEGIN + PROMPT 1 7 "Assogettato scissione pagamenti art.17 ter DPR 633/72" + FLAGS "D" +END + +BOOLEAN S_ATTACH +BEGIN + PROMPT 1 8 "Documenti in allegato" + FLAGS "D" +END + +BOOLEAN S_ONLYGEN +BEGIN + PROMPT 20 8 "Solo generazione" + FLAGS "D" +END + + +ENDPAGE + +TOOLBAR "Documento" 0 0 0 2 + +BUTTON DLG_OK 2 2 +BEGIN + PROMPT 1 1 "" +END + +BUTTON DLG_USER 2 2 +BEGIN + PROMPT 1 1 "Collega" + PICTURE TOOL_LINK +END + + +BUTTON DLG_CANCEL 2 2 +BEGIN + PROMPT 1 1 "" +END + + +ENDPAGE + +ENDMASK diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp new file mode 100644 index 000000000..b4a171dd5 --- /dev/null +++ b/src/fp/fplib01.cpp @@ -0,0 +1,102 @@ +#include "fplib01.h" +#include +#include +#include +#include +#include +#include +#include "text.h" +#include + +void set_connection(SSimple_query& s) +{ + if (s.sq_connect( + TString() << ini_get_string(CONFIG_DITTA, "fp", "ip") << "@" << ini_get_string(CONFIG_DITTA, "fp", "db"), + ini_get_string(CONFIG_DITTA, "fp", "usr"), + decode(ini_get_string(CONFIG_DITTA, "fp", "psw")), + TSDB_MSSQL) != NOERR) + fatal_box("Impossibile connettersi al DB esterno"); + +} + +SSimple_query& db() +{ + static SSimple_query* db = nullptr; + + if (db == nullptr) + { + db = new SSimple_query(); + set_connection(*db); + // Non utilizzo l'autocommit, viene gestito manualmente + db->sq_set_autocommit(false); + } + return *db; +} + +string getline(ifstream& f); + +bool check_tables() +{ + /* + * Da questo programma in poi verrà utilizzato un sistema diverso per la creazione e aggiornamento delle tabelle + * Verranno utilizzati dei file.sql aggiornati con il numero di patch, leggermente scomodo durante la creazione ma facile per i controlli successivamente + */ + SLIST files = xvt_fsys_list_files(".sql", "sql/fp0/", false); + TLocalisamfile tabmod(LF_TABMOD); + tabmod.put("MOD", "FP"); + tabmod.put("COD", "SQL"); + tabmod.put("CODTAB", "VERSION"); + TString version; + if (tabmod.read() == NOERR) + version = tabmod.get("S0"); + for(SLIST_ELT file = xvt_slist_get_first(files); file; file = xvt_slist_get_next(files, file)) + { + TString file_version = TFilename(file->str).name_only(); + file_version = file_version.mid(2, 4); + if (file_version <= version) + continue; + ifstream f(file->str); + if(f.is_open()) + { + string s; + while(!f.eof()) + { + s += getline(f); + // Cerco un ; + const int limiter = s.find(';') + 1; + if(limiter > 0) + { + string query = s.substr(0, limiter); + s.erase(0, limiter); + if(!db().sq_set_exec(query) || !db().sq_commit()) + { + fatal_box("Impossibile eseguire/salvare la query:\n%s\n%s", query.c_str(), db().sq_get_string_error()); + } + } + } + } + else + { + cantread_box(file->str); + return false; + } + // Salvo su tabmod + tabmod.zero(); + tabmod.put("MOD", "FP"); + tabmod.put("COD", "SQL"); + tabmod.put("CODTAB", "VERSION"); + tabmod.put("S0", file_version); + if(tabmod.rewrite_write() != NOERR && !yesno_box("Attenzione! Errore di aggiornamento versione di Database in Campo, continuare? %s", file_version)) + { + return false; + } + } + return true; +} + +string getline(ifstream& f) +{ + string app; + getline(f, app); + return app; +} \ No newline at end of file diff --git a/src/fp/fplib01.h b/src/fp/fplib01.h new file mode 100644 index 000000000..15dc287c6 --- /dev/null +++ b/src/fp/fplib01.h @@ -0,0 +1,13 @@ +#ifndef __FPLIB01_H +#define __FPLIB01_H + +#include +#include +#include + +#define SQL_FLD "sql/" + +SSimple_query& db(); +bool check_tables(); + +#endif // __FPLIB01_H diff --git a/src/fp/sql/fp0100.sql b/src/fp/sql/fp0100.sql new file mode 100644 index 000000000..5fc52d8f6 --- /dev/null +++ b/src/fp/sql/fp0100.sql @@ -0,0 +1,1656 @@ +CREATE TABLE FPCDD00F ( + PV_AMBIENTE CHAR(10), + PV_DESCAMPO1 CHAR(20), + PV_DESCAMPO2 CHAR(20), + PV_DESCAMPO3 CHAR(20), + PV_DESCAMPO4 CHAR(20), + PV_DESCAMPO5 CHAR(20)) ; + +ALTER TABLE FPCDD00F + ADD CONSTRAINT FPCDD00Q + UNIQUE( PV_AMBIENTE ) ; + +CREATE TABLE FPCDE00F ( + PX_CODDEST CHAR(7), + PX_FISCIVAPAESE CHAR(2), + PX_FISCIVACOD CHAR(28), + PX_CODFISCALE CHAR(16), + PX_PEC CHAR(255), + PX_DESDEST CHAR(35), + PX_AMBIENTE CHAR(10), + PX_GESPROT CHAR(1), + PX_CLASSE CHAR(2), + PX_UTEGEST CHAR(10), + PX_SETGEST CHAR(2), + PX_PERCORSO CHAR(255), + PX_CAMPO1 CHAR(20), + PX_CAMPO2 CHAR(20), + PX_CAMPO3 CHAR(20), + PX_CAMPO4 CHAR(20), + PX_CAMPO5 CHAR(20), + PX_FILLER1 CHAR(100), + PX_FILLER2 CHAR(100)) ; + +ALTER TABLE FPCDE00F + ADD CONSTRAINT FPCDEE0Q + UNIQUE( PX_CODDEST , PX_FISCIVAPAESE , PX_FISCIVACOD , PX_CODFISCALE ) ; + +CREATE TABLE FPERR00K ( + PXFANN CHAR(1), + PXPRGI CHAR(10), + PXHFAT CHAR(20), + PXBFAT CHAR(50), + PXUHRI DATE, + PXTDOC CHAR(4), + PXNFAT CHAR(20), + PXUFAT DATE, + PXCFOR CHAR(10), + PXNFIL CHAR(20), + PXNLIN NUMERIC(4, 0), + PXNERR NUMERIC(4, 0), + PXCERR CHAR(5), + PXDERR CHAR(150), + PXCAMP CHAR(15), + PXDATO CHAR(150), + PXFINT CHAR(1), + PXCUIN CHAR(10), + PXDTIN DATE, + PXHOIN TIME, + CONSTRAINT FPERR00Q PRIMARY KEY( PXPRGI , PXHFAT , PXBFAT , PXUHRI , PXNFIL , PXNLIN , PXNERR ) ) ; + +CREATE TABLE FPPRO00F ( + PZ_STATO CHAR(1), + PZ_NRAZIONE NUMERIC(9, 0), + PZ_DTAZIONE NUMERIC(8, 0), + PZ_USAZIONE CHAR(10), + PZ_KEYPRGINVIO CHAR(10), + PZ_KEYHEADERFATT CHAR(20), + PZ_KEYBODYFATT CHAR(50), + PZ_TIPODOC CHAR(4), + PZ_DATA DATE, + PZ_NUMERO CHAR(20), + PZ_STATOELAB CHAR(1), + PZ_GESTIONE CHAR(1), + PZ_ERRINT CHAR(1), + PZ_DATAPROT DATE, + PZ_USERPROT CHAR(10), + PZ_CLASPROT CHAR(2), + PZ_TIPOPROT CHAR(2), + PZ_ANNOPROT NUMERIC(4, 0), + PZ_NUMPROT NUMERIC(10, 0), + PZ_TIPOCF CHAR(1), + PZ_CLIFOR CHAR(10), + PZ_SETGEST CHAR(2), + PZ_UTEGEST CHAR(10), + PZ_DATAACCET DATE, + PZ_UTENACCET CHAR(10), + PZ_DATACONT DATE, + PZ_UTENCONT CHAR(10), + PZ_TIPOREGCONT CHAR(6), + PZ_NUMREGCONT NUMERIC(20, 0), + PZ_DATAREGCONT DATE, + PZ_TIPOCONT CHAR(1), + PZ_DATAARCH DATE, + PZ_UTENARCH CHAR(10), + PZ_TIPOARC CHAR(1), + PZ_STATOPROT CHAR(1), + PZ_IDDOCR CHAR(20), + PZ_DATADOCR DATE, + PZ_CODCUP CHAR(15), + PZ_CODCIG CHAR(15), + PZ_IMPTOTDOC NUMERIC(15, 2), + PZ_IMPCALDOC NUMERIC(15, 2), + PZ_IMPTOTPAG NUMERIC(15, 2), + PZ_IMPCALPAG NUMERIC(15, 2), + PZ_NOMXML CHAR(255), + PZ_DATAORARIC DATE, + PZ_DATASTATO DATE, + PZ_FMTTRASMISS CHAR(5), + PZ_CODDEST CHAR(7), + PZ_NOTAFATT CHAR(255), + PZ_AMBIENTE CHAR(10), + PZ_FILLER1 CHAR(100), + PZ_FILLER2 CHAR(100)) ; + +ALTER TABLE FPPRO00F + ADD CONSTRAINT FPPRO00Q + UNIQUE( PZ_KEYPRGINVIO , PZ_KEYHEADERFATT , PZ_KEYBODYFATT , PZ_AMBIENTE ) ; + + +CREATE TABLE PAA0100F ( + P1_KEYPRGINVIO CHAR(10), + P1_KEYHEADERFATT CHAR(20), + P1_KEYBODYFATT CHAR(50), + P1_TRASMITTPAESE CHAR(2), + P1_TRASMITTCOD CHAR(28), + P1_PRGINVIO CHAR(10), + P1_FMTTRASMISS CHAR(5), + P1_CODDEST CHAR(7), + P1_TELEFONO CHAR(12), + P1_MAIL CHAR(255), + P1_GESTIONE CHAR(1), + P1_ERRINT CHAR(1), + P1_ERREST CHAR(1), + P1_NOMXML CHAR(255), + P1_DATAORARIC DATE, + P1_DATASTATO DATE, + P1_STATOELAB CHAR(1)) ; + +ALTER TABLE PAA0100F + ADD CONSTRAINT PAA0100Q + UNIQUE( P1_KEYPRGINVIO , P1_KEYHEADERFATT , P1_KEYBODYFATT , P1_DATAORARIC ) ; + +CREATE TABLE PAA0200F ( + P2_KEYPRGINVIO CHAR(10), + P2_KEYHEADERFATT CHAR(20), + P2_KEYBODYFATT CHAR(50), + P2_FISCIVAPAESE CHAR(2), + P2_FISCIVACOD CHAR(28), + P2_CODFISCALE CHAR(16), + P2_ANADENOMIN CHAR(80), + P2_ANANOME CHAR(60), + P2_ANACOGNOME CHAR(60), + P2_ANATITOLO CHAR(10), + P2_ANACODEORI CHAR(17), + P2_ALBOPROFESS CHAR(60), + P2_PROVALBO CHAR(2), + P2_NRISCRIZALBO CHAR(60), + P2_DTISCRIZEALBO DATE , + P2_REGFISCALE CHAR(4), + P2_SEDEIND CHAR(60), + P2_SEDENRCIVICO CHAR(8), + P2_SEDECAP NUMERIC(5, 0), + P2_SEDECOMUNE CHAR(60), + P2_SEDEPROV CHAR(2), + P2_SEDENAZ CHAR(2), + P2_STABORGIND CHAR(60), + P2_STABORGNRCIVICO CHAR(8), + P2_STABORGCAP NUMERIC(5, 0), + P2_STABORGCOMUNE CHAR(60), + P2_STABORGPROV CHAR(2), + P2_STABORGNAZ CHAR(2), + P2_ISCRREAUFF CHAR(2), + P2_ISCRREANUM CHAR(20), + P2_ISCRREACAP NUMERIC(15, 2), + P2_ISCRREASOCIOU CHAR(2), + P2_ISCRREASLIQUID CHAR(2), + P2_CONTATTITELEF CHAR(12), + P2_CONTATTIFAX CHAR(12), + P2_CONTATTIMAIL CHAR(255), + P2_RIFAMMINISTR CHAR(20), + P2_NOMEFILE CHAR(255), + P2_GESTIONE CHAR(1), + P2_ERRINT CHAR(1), + P2_ERREST CHAR(1)) ; + +ALTER TABLE PAA0200F + ADD CONSTRAINT PAA0200Q + UNIQUE( P2_KEYPRGINVIO , P2_KEYHEADERFATT , P2_KEYBODYFATT ) ; + +CREATE TABLE PAA0300F ( + P3_KEYPRGINVIO CHAR(10), + P3_KEYHEADERFATT CHAR(20), + P3_KEYBODYFATT CHAR(50), + P3_FISCIVAPAESE CHAR(2), + P3_FISCIVACODICE CHAR(28), + P3_CODFISC CHAR(16), + P3_ANADENOMI CHAR(80), + P3_ANANOME CHAR(60), + P3_ANACOGNOME CHAR(60), + P3_ANATITOLO CHAR(10), + P3_ANACODEORI CHAR(17), + P3_GESTIONE CHAR(1), + P3_ERRINT CHAR(1), + P3_ERREST CHAR(1)) ; + +ALTER TABLE PAA0300F + ADD CONSTRAINT PAA0300Q + UNIQUE( P3_KEYPRGINVIO , P3_KEYHEADERFATT , P3_KEYBODYFATT ) ; + +CREATE TABLE PAA0400F ( + P4_KEYPRGINVIO CHAR(10), + P4_KEYHEADERFATT CHAR(20), + P4_KEYBODYFATT CHAR(50), + P4_FISCIVAPAESE CHAR(2), + P4_FISCIVACOD CHAR(28), + P4_CODFISC CHAR(16), + P4_ANADENOM CHAR(80), + P4_ANANOME CHAR(60), + P4_ANACOGNOME CHAR(60), + P4_ANATITOLO CHAR(10), + P4_ANACODEORI CHAR(17), + P4_SEDEIND CHAR(60), + P4_SEDENRCIVICO CHAR(8), + P4_SEDECAP NUMERIC(5, 0), + P4_SEDECOMUNE CHAR(60), + P4_SEDEPROV CHAR(2), + P4_SEDENAZ CHAR(2), + P4_GESTIONE CHAR(1), + P4_ERRINT CHAR(1), + P4_ERREST CHAR(1)) ; + +ALTER TABLE PAA0400F + ADD CONSTRAINT PAA0400Q + UNIQUE( P4_KEYPRGINVIO , P4_KEYHEADERFATT , P4_KEYBODYFATT ) ; + +CREATE TABLE PAA0500F ( + P5_KEYPRGINVIO CHAR(10), + P5_KEYHEADERFATT CHAR(20), + P5_KEYBODYFATT CHAR(50), + P5_FISCIVAPAESE CHAR(2), + P5_FISCIVACOD CHAR(28), + P5_CODICEFISC CHAR(16), + P5_ANADENOMIN CHAR(80), + P5_ANANOME CHAR(60), + P5_ANACOGNOME CHAR(60), + P5_ANATITOLO CHAR(10), + P5_ANACODEORI CHAR(17), + P5_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA0500F + ADD CONSTRAINT PAA0500Q + UNIQUE( P5_KEYPRGINVIO , P5_KEYHEADERFATT , P5_KEYBODYFATT ) ; + +CREATE TABLE PAA0600F ( + P6_KEYPRGINVIO CHAR(10), + P6_KEYHEADERFATT CHAR(20), + P6_KEYBODYFATT CHAR(50), + P6_SOGGEMITT CHAR(2), + P6_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA0600F + ADD CONSTRAINT PAA0600Q + UNIQUE( P6_KEYPRGINVIO , P6_KEYHEADERFATT , P6_KEYBODYFATT ) ; + +CREATE TABLE PAA0700F ( + P7_KEYPRGINVIO CHAR(10), + P7_KEYHEADERFATT CHAR(20), + P7_KEYBODYFATT CHAR(50), + P7_TIPODOC CHAR(4), + P7_DIVISA CHAR(3), + P7_DATA DATE, + P7_NUMERO CHAR(20), + P7_TIPORITENUTA CHAR(4), + P7_IMPORTORIT NUMERIC(15, 2), + P7_ALIQUOTARIT NUMERIC(6, 2), + P7_CAUSPAGAM CHAR(1), + P7_NUMEROBOLLO CHAR(14), + P7_IMPORTOBOLLO NUMERIC(15, 2), + P7_GESTIONE CHAR(1), + P7_ERRINT CHAR(1), + P7_ERREST CHAR(1)) ; + +ALTER TABLE PAA0700F + ADD CONSTRAINT PAA0700Q + UNIQUE( P7_KEYPRGINVIO , P7_KEYHEADERFATT , P7_KEYBODYFATT ) ; + +CREATE TABLE PAA0800F ( + P8_KEYPRGINVIO CHAR(10), + P8_KEYHEADERFATT CHAR(20), + P8_KEYBODYFATT CHAR(50), + P8_RIFNUMLINEA NUMERIC(4, 0), + P8_TIPOCASSA CHAR(4), + P8_ALIQCASSA NUMERIC(6, 2), + P8_IMCONTRCASSA NUMERIC(15, 2), + P8_IMPONCASSA NUMERIC(15, 2), + P8_ALIQIVA NUMERIC(6, 2), + P8_RITENUTA CHAR(2), + P8_NATURA CHAR(2), + P8_RIFAMMINIS CHAR(20), + P8_GESTIONE CHAR(1), + P8_ERRINT CHAR(1), + P8_ERREST CHAR(1)) ; + +ALTER TABLE PAA0800F + ADD CONSTRAINT PAA0800Q + UNIQUE( P8_KEYPRGINVIO , P8_KEYHEADERFATT , P8_KEYBODYFATT , P8_RIFNUMLINEA ) ; + +CREATE TABLE PAA0900F ( + P9_KEYPRGINVIO CHAR(10), + P9_KEYHEADERFATT CHAR(20), + P9_KEYBODYFATT CHAR(50), + P9_RIFNUMLINEA NUMERIC(4, 0), + P9_TIPOSCONTO CHAR(2), + P9_PERCSCONTO NUMERIC(6, 2), + P9_IMPSCONTO NUMERIC(15, 2), + P9_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA0900F + ADD CONSTRAINT PAA0900Q + UNIQUE( P9_KEYPRGINVIO , P9_KEYHEADERFATT , P9_KEYBODYFATT , P9_RIFNUMLINEA ) ; + +CREATE TABLE PAA1000F ( + P0_KEYPRGINVIO CHAR(10), + P0_KEYHEADERFATT CHAR(20), + P0_KEYBODYFATT CHAR(50), + P0_RIFNUMLINEA NUMERIC(4, 0), + P0_IDDOC CHAR(20), + P0_DATADOC DATE, + P0_NUMITEM CHAR(20), + P0_COMMESSACONV CHAR(100), + P0_CODCUP CHAR(15), + P0_CODCIG CHAR(15), + P0_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA1000F + ADD CONSTRAINT PAA1000Q + UNIQUE( P0_KEYPRGINVIO , P0_KEYHEADERFATT , P0_KEYBODYFATT , P0_RIFNUMLINEA ) ; + +CREATE TABLE PAA1100F ( + PA_KEYPRGINVIO CHAR(10), + PA_KEYHEADERFATT CHAR(20), + PA_KEYBODYFATT CHAR(50), + PA_RIFNUMLINEA NUMERIC(4, 0), + PA_IDDOC CHAR(20), + PA_DATADOCU DATE, + PA_NUMITEM CHAR(20), + PA_COMMCONVENZ CHAR(100), + PA_CODCUP CHAR(15), + PA_CODCIG CHAR(15), + PA_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA1100F + ADD CONSTRAINT PAA1100Q + UNIQUE( PA_KEYPRGINVIO , PA_KEYHEADERFATT , PA_KEYBODYFATT , PA_RIFNUMLINEA ) ; + +CREATE TABLE PAA1200F ( + PB_KEYPRGINVIO CHAR(10), + PB_KEYHEADERFATT CHAR(20), + PB_KEYBODYFATT CHAR(50), + PB_RIFNUMLINEA NUMERIC(4, 0), + PB_IDDOC CHAR(20), + PB_DATADOCO DATE, + PB_NUMITEM CHAR(20), + PB_COMMCONVENZ CHAR(100), + PB_CODCUP CHAR(15), + PB_CODCIG CHAR(15), + PB_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA1200F + ADD CONSTRAINT PAA1200Q + UNIQUE( PB_KEYPRGINVIO , PB_KEYHEADERFATT , PB_KEYBODYFATT , PB_RIFNUMLINEA ) ; + +CREATE TABLE PAA1300F ( + PC_KEYPRGINVIO CHAR(10), + PC_KEYHEADERFATT CHAR(20), + PC_KEYBODYFATT CHAR(50), + PC_RIFNUMLINEA NUMERIC(4, 0), + PC_IDDOC CHAR(20), + PC_DATADOC DATE, + PC_NUMITEM CHAR(20), + PC_COMMCONVENZ CHAR(100), + PC_CODCUP CHAR(15), + PC_CODCIG CHAR(15), + PC_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA1300F + ADD CONSTRAINT PAA1300Q + UNIQUE( PC_KEYPRGINVIO , PC_KEYHEADERFATT , PC_KEYBODYFATT , PC_RIFNUMLINEA ) ; + +CREATE TABLE PAA1400F ( + PD_KEYPRGINVIO CHAR(10), + PD_KEYHEADERFATT CHAR(20), + PD_KEYBODYFATT CHAR(50), + PD_RIFNUMLINEA NUMERIC(4, 0), + PD_IDDOC CHAR(20), + PD_DATADOC DATE, + PD_NUMITEM CHAR(20), + PD_COMMCONVENZ CHAR(100), + PD_CODCUP CHAR(15), + PD_CODCIG CHAR(15), + PD_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA1400F + ADD CONSTRAINT PAA1400Q + UNIQUE( PD_KEYPRGINVIO , PD_KEYHEADERFATT , PD_KEYBODYFATT , PD_RIFNUMLINEA ) ; + +CREATE TABLE PAA1500F ( + PE_KEYPRGINVIO CHAR(10), + PE_KEYHEADERFATT CHAR(20), + PE_KEYBODYFATT CHAR(50), + PE_RIFFASE NUMERIC(3, 0), + PE_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA1500F + ADD CONSTRAINT PAA1500Q + UNIQUE( PE_KEYPRGINVIO , PE_KEYHEADERFATT , PE_KEYBODYFATT , PE_RIFFASE ) ; + +CREATE TABLE PAA1600F ( + PF_KEYPRGINVIO CHAR(10), + PF_KEYHEADERFATT CHAR(20), + PF_KEYBODYFATT CHAR(50), + PF_NUMDDDT CHAR(20), + PF_DATADDT DATE, + PF_RIFNUMLINEA NUMERIC(4, 0), + PF_GESTIONE CHAR(1), + PF_ERRINT CHAR(1), + PF_ERREST CHAR(1)) ; + +ALTER TABLE PAA1600F + ADD CONSTRAINT PAA1600Q + UNIQUE( PF_KEYPRGINVIO , PF_KEYHEADERFATT , PF_KEYBODYFATT , PF_NUMDDDT , PF_RIFNUMLINEA ) ; + +CREATE TABLE PAA1700F ( + PG_KEYPRGINVIO CHAR(10), + PG_KEYHEADERFATT CHAR(20), + PG_KEYBODYFATT CHAR(50), + PG_FISCIVAPAESE CHAR(2), + PG_FISCIVACODICE CHAR(28), + PG_CODICEFISCALE CHAR(16), + PG_ANADENOMINAZ CHAR(80), + PG_ANANOME CHAR(60), + PG_ANACOGNOME CHAR(60), + PG_ANATITOLO CHAR(10), + PG_ANACODEORI CHAR(17), + PG_NUMLICGUIDA CHAR(20), + PG_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA1700F + ADD CONSTRAINT PAA1700Q + UNIQUE( PG_KEYPRGINVIO , PG_KEYHEADERFATT , PG_KEYBODYFATT ) ; + +CREATE TABLE PAA1800F ( + PI_KEYPRGINVIO CHAR(10), + PI_KEYHEADERFATT CHAR(20), + PI_KEYBODYFATT CHAR(50), + PI_NUMEROLINEA NUMERIC(4, 0), + PI_TIPOCESSPREST CHAR(2), + PI_DESCRIZIONE CHAR(100), + PI_QUANTITA NUMERIC(21, 8), + PI_UNITAMISURA CHAR(10), + PI_DTINIZIOPER DATE, + PI_DTFINEPER DATE, + PI_PREZZOUNIT NUMERIC(21, 8), + PI_PRZTOTALE NUMERIC(21, 8), + PI_ALIQUOTAIVA NUMERIC(6, 2), + PI_RITENUTA CHAR(2), + PI_NATURA CHAR(2), + PI_RIFAMMINISTR CHAR(20), + PI_GESTIONE CHAR(1), + PI_ERRINT CHAR(1), + PI_ERREST CHAR(1)) ; + +ALTER TABLE PAA1800F + ADD CONSTRAINT PAA1800Q + UNIQUE( PI_KEYPRGINVIO , PI_KEYHEADERFATT , PI_KEYBODYFATT , PI_NUMEROLINEA ) ; + +CREATE TABLE PAA1900F ( + PY_KEYPRGINVIO CHAR(10), + PY_KEYHEADERFATT CHAR(20), + PY_KEYBODYFATT CHAR(50), + PY_KEYNLINEA NUMERIC(4, 0), + PY_KEYNLINAR NUMERIC(4, 0), + PY_TIPOARTICOLO CHAR(35), + PY_VALOREARTICOLO CHAR(35), + PY_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA1900F + ADD CONSTRAINT PAA1900Q + UNIQUE( PY_KEYPRGINVIO , PY_KEYHEADERFATT , PY_KEYBODYFATT , PY_KEYNLINEA , PY_KEYNLINAR ) ; + +CREATE TABLE PAA2000F ( + PJ_KEYPRGINVIO CHAR(10), + PJ_KEYHEADERFATT CHAR(20), + PJ_KEYBODYFATT CHAR(50), + PJ_KEYNLINEA NUMERIC(4, 0), + PJ_KEYNLINAR NUMERIC(4, 0), + PJ_TIPOSCONTO CHAR(2), + PJ_PERCSCONTO NUMERIC(6, 2), + PJ_IMPORTOSCONTO NUMERIC(15, 2), + PJ_GESTIONE CHAR(1)) ; + +CREATE TABLE PAA2100F ( + PK_KEYPRGINVIO CHAR(10), + PK_KEYHEADERFATT CHAR(20), + PK_KEYBODYFATT CHAR(50), + PK_KEYNLINEA NUMERIC(4, 0), + PK_KEYNLINAR NUMERIC(4, 0), + PK_TIPODATO CHAR(10), + PK_RIFDATO CHAR(60), + PK_RIFNUMERO NUMERIC(21, 5), + PK_RIFDATA DATE, + PK_GESTIONE CHAR(1)) ; + +CREATE TABLE PAA2200F ( + PL_KEYPRGINVIO CHAR(10), + PL_KEYHEADERFATT CHAR(20), + PL_KEYBODYFATT CHAR(50), + PL_ALIQUOTAIVA NUMERIC(6, 2), + PL_NATURA CHAR(2), + PL_SPESEACCESS NUMERIC(15, 2), + PL_ARROTONDAM NUMERIC(21, 5), + PL_IMPONIBILE NUMERIC(15, 2), + PL_IMPOSTA NUMERIC(15, 2), + PL_ESIGIVA CHAR(1), + PL_RIFNORMATIVO CHAR(100), + PL_GESTIONE CHAR(1), + PL_ERRINT CHAR(1), + PL_ERREST CHAR(1), + PL_DETRAIBILE NUMERIC(6, 2), + PL_DEDUCIBILE CHAR(2)) ; + +CREATE TABLE PAA2300F ( + PM_KEYPRGINVIO CHAR(10), + PM_KEYHEADERFATT CHAR(20), + PM_KEYBODYFATT CHAR(50), + PM_DATA DATE, + PM_TOTALEPERCORSO CHAR(15), + PM_GESTIONE CHAR(1), + PM_ERRINT CHAR(1), + PM_ERREST CHAR(1)) ; + +ALTER TABLE PAA2300F + ADD CONSTRAINT PAA2300Q + UNIQUE( PM_KEYPRGINVIO , PM_KEYHEADERFATT , PM_KEYBODYFATT ) ; + +CREATE TABLE PAA2400F ( + PN_KEYPRGINVIO CHAR(10), + PN_KEYHEADERFATT CHAR(20), + PN_KEYBODYFATT CHAR(50), + PN_RIGA NUMERIC(4, 0), + PN_CONDPAGAMENTO CHAR(4), + PN_GESTIONE CHAR(1), + PN_ERRINT CHAR(1), + PN_ERREST CHAR(1)) ; + +ALTER TABLE PAA2400F + ADD CONSTRAINT PAA2400Q + UNIQUE( PN_KEYPRGINVIO , PN_KEYHEADERFATT , PN_KEYBODYFATT , PN_RIGA ) ; + +CREATE TABLE PAA2500F ( + PO_KEYPRGINVIO CHAR(10), + PO_KEYHEADERFATT CHAR(20), + PO_KEYBODYFATT CHAR(50), + PO_RIGA NUMERIC(4, 0), + PO_CONDPAGAMENTO CHAR(4), + PO_BENEFICIARIO CHAR(200), + PO_MODALITAPAGAM CHAR(4), + PO_DATARIFTERM DATE, + PO_GGTERMINIPAG NUMERIC(3, 0), + PO_DATASCADENZA DATE, + PO_IMPORTO NUMERIC(15, 2), + PO_CODUFFPOST CHAR(20), + PO_COGNOMEQUIET CHAR(60), + PO_NOMEQUIET CHAR(60), + PO_CFQUIETANZA CHAR(16), + PO_TITOLOQUIET CHAR(10), + PO_ISTFINANZ CHAR(80), + PO_IBAN CHAR(34), + PO_ABI NUMERIC(5, 0), + PO_CAB NUMERIC(5, 0), + PO_BIC CHAR(11), + PO_SCPAGANTIC NUMERIC(15, 2), + PO_DTLIMANTIC DATE, + PO_PENALITAPAGAM NUMERIC(15, 2), + PO_DATADECORRP DATE, + PO_CODICEPAGAM CHAR(15), + PO_GESTIONE CHAR(1), + PO_ERRINT CHAR(1), + PO_ERREST CHAR(1)) ; + +CREATE TABLE PAA2600F ( + PP_KEYPRGINVIO CHAR(10), + PP_KEYHEADERFATT CHAR(20), + PP_KEYBODYFATT CHAR(50), + PP_NUMEROLINEA NUMERIC(4, 0), + PP_NOMEATTACHMENT CHAR(60), + PP_COMPRESSIONE CHAR(10), + PP_FMTATTACHMENT CHAR(10), + PP_DESCATTACHMENT CHAR(100), + PP_ATTACHMENT CHAR(255), + PP_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA2600F + ADD CONSTRAINT PAA2600Q + UNIQUE( PP_KEYPRGINVIO , PP_KEYHEADERFATT , PP_KEYBODYFATT , PP_NUMEROLINEA ) ; + +CREATE TABLE PAA2700F ( + PQ_KEYPRGINVIO CHAR(10), + PQ_KEYHEADERFATT CHAR(20), + PQ_KEYBODYFATT CHAR(50), + PQ_IMPTOTDOC NUMERIC(15, 2), + PQ_ARROTOND NUMERIC(15, 2), + PQ_CAUSALE CHAR(200), + PQ_ART73 CHAR(2), + PQ_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA2700F + ADD CONSTRAINT PAA2700Q + UNIQUE( PQ_KEYPRGINVIO , PQ_KEYHEADERFATT , PQ_KEYBODYFATT ) ; + +CREATE TABLE PAA2800F ( + PR_KEYPRGINVIO CHAR(10), + PR_KEYHEADERFATT CHAR(20), + PR_KEYBODYFATT CHAR(50), + PR_MEZZOTRASP CHAR(80), + PR_CAUSALETRASP CHAR(100), + PR_NUMCOLLI NUMERIC(4, 0), + PR_DESCRIZIONE CHAR(100), + PR_UMPESO CHAR(10), + PR_PESOLORDO NUMERIC(7, 2), + PR_PESONETTO NUMERIC(7, 2), + PR_DATAORARIT DATE, + PR_DATAUNIZIO DATE, + PR_TIPORESA CHAR(3), + PR_INDIRIZZORESA CHAR(60), + PR_NRCIVICORESA CHAR(8), + PR_CAPRESA NUMERIC(5, 0), + PR_COMUNERESA CHAR(60), + PR_PROVINCIARESA CHAR(2), + PR_NAZIONERESA CHAR(2), + PR_DATAORACON DATE, + PR_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA2800F + ADD CONSTRAINT PAA2800Q + UNIQUE( PR_KEYPRGINVIO , PR_KEYHEADERFATT , PR_KEYBODYFATT ) ; + +CREATE TABLE PAA2900F ( + PS_KEYPRGINVIO CHAR(10), + PS_KEYHEADERFATT CHAR(20), + PS_KEYBODYFATT CHAR(50), + PS_NORMARIFER CHAR(100), + PS_NUMFATTPRINC CHAR(20), + PS_DATAFATTPRINC DATE, + PS_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA2900F + ADD CONSTRAINT PAA2900Q + UNIQUE( PS_KEYPRGINVIO , PS_KEYHEADERFATT , PS_KEYBODYFATT ) ; + +CREATE TABLE PAA3000F ( + PT_KEYPRGINVIO CHAR(10), + PT_KEYHEADERFATT CHAR(20), + PT_KEYBODYFATT CHAR(50), + PT_RIFNUMLINEA NUMERIC(4, 0), + PT_COMMENTO VARCHAR, + PT_GESTIONE CHAR(1)) ; + +ALTER TABLE PAA3000F + ADD CONSTRAINT PAA3000Q + UNIQUE( PT_KEYPRGINVIO , PT_KEYHEADERFATT , PT_KEYBODYFATT , PT_RIFNUMLINEA ) ; + +CREATE TABLE PAA3100F ( + PH_KEYPRGINVIO CHAR(10), + PH_KEYHEADERFATT CHAR(20), + PH_KEYBODYFATT CHAR(50), + PH_STABORGIND CHAR(60), + PH_STABORGNRCIVICO CHAR(8), + PH_STABORGCAP NUMERIC(5, 0), + PH_STABORGCOMUNE CHAR(60), + PH_STABORGPROV CHAR(2), + PH_STABORGNAZ CHAR(2), + PH_FISCIVAPAESE CHAR(2), + PH_FISCIVACODICE CHAR(28), + PH_ANADENOMI CHAR(80), + PH_ANANOME CHAR(60), + PH_ANACOGNOME CHAR(60), + PH_GESTIONE CHAR(1), + PH_ERRINT CHAR(1), + PH_ERREST CHAR(1)) ; + +ALTER TABLE PAA3100F + ADD CONSTRAINT PAA3100Q + UNIQUE( PH_KEYPRGINVIO , PH_KEYHEADERFATT , PH_KEYBODYFATT ) ; + +CREATE TABLE PAA3200F ( + PU_KEYPRGINVIO CHAR(10), + PU_KEYHEADERFATT CHAR(20), + PU_KEYBODYFATT CHAR(50), + PU_PEC CHAR(255), + PU_GESTIONE CHAR(1), + PU_ERRINT CHAR(1), + PU_ERREST CHAR(1)) ; + +ALTER TABLE PAA3200F + ADD CONSTRAINT PAA3200Q + UNIQUE( PU_KEYPRGINVIO , PU_KEYHEADERFATT , PU_KEYBODYFATT ) ; + +CREATE TABLE PAERR00K ( + PXFANN CHAR(1), + PXHFAT CHAR(20), + PXBFAT CHAR(50), + PXPRGI CHAR(10), + PXTDOC CHAR(4), + PXCNFA CHAR(4), + PXNFAT CHAR(20), + PXUFAT DATE, + PXCCLI CHAR(10), + PXNFIL CHAR(20), + PXNLIN NUMERIC(4, 0), + PXNERR NUMERIC(4, 0), + PXCERR CHAR(5), + PXDERR CHAR(150), + PXCAMP CHAR(15), + PXDATO CHAR(150), + PXFINT CHAR(1), + PXCUIN CHAR(10), + PXDTIN DATE, + PXHOIN TIME) ; + +CREATE TABLE PAF0100F ( + P1_KEYPRGINVIO CHAR(10), + P1_KEYHEADERFATT CHAR(20), + P1_KEYBODYFATT CHAR(50), + P1_TRASMITTPAESE CHAR(2), + P1_TRASMITTCOD CHAR(28), + P1_PRGINVIO CHAR(10), + P1_FMTTRASMISS CHAR(5), + P1_CODDEST CHAR(7), + P1_TELEFONO CHAR(12), + P1_MAIL CHAR(255), + P1_GESTIONE CHAR(1), + P1_ERRINT CHAR(1), + P1_ERREST CHAR(1)) ; + +ALTER TABLE PAF0100F + ADD CONSTRAINT PAF0100Q + UNIQUE( P1_KEYPRGINVIO , P1_KEYHEADERFATT , P1_KEYBODYFATT ) ; + +CREATE TABLE PAF0200F ( + P2_KEYPRGINVIO CHAR(10), + P2_KEYHEADERFATT CHAR(20), + P2_KEYBODYFATT CHAR(50), + P2_FISCIVAPAESE CHAR(2), + P2_FISCIVACOD CHAR(28), + P2_CODFISCALE CHAR(16), + P2_ANADENOMIN CHAR(80), + P2_ANANOME CHAR(60), + P2_ANACOGNOME CHAR(60), + P2_ANATITOLO CHAR(10), + P2_ANACODEORI CHAR(17), + P2_ALBOPROFESS CHAR(60), + P2_PROVALBO CHAR(2), + P2_NRISCRIZALBO CHAR(60), + P2_DTISCRIZEALBO DATE , + P2_REGFISCALE CHAR(4), + P2_SEDEIND CHAR(60), + P2_SEDENRCIVICO CHAR(8), + P2_SEDECAP NUMERIC(5, 0), + P2_SEDECOMUNE CHAR(60), + P2_SEDEPROV CHAR(2), + P2_SEDENAZ CHAR(2), + P2_STABORGIND CHAR(60), + P2_STABORGNRCIVICO CHAR(8), + P2_STABORGCAP NUMERIC(5, 0), + P2_STABORGCOMUNE CHAR(60), + P2_STABORGPROV CHAR(2), + P2_STABORGNAZ CHAR(2), + P2_ISCRREAUFF CHAR(2), + P2_ISCRREANUM CHAR(20), + P2_ISCRREACAP NUMERIC(15, 2), + P2_ISCRREASOCIOU CHAR(2), + P2_ISCRREASLIQUID CHAR(2), + P2_CONTATTITELEF CHAR(12), + P2_CONTATTIFAX CHAR(12), + P2_CONTATTIMAIL CHAR(255), + P2_RIFAMMINISTR CHAR(20), + P2_GESTIONE CHAR(1), + P2_ERRINT CHAR(1), + P2_ERREST CHAR(1)) ; + +ALTER TABLE PAF0200F + ADD CONSTRAINT PAF0200Q + UNIQUE( P2_KEYPRGINVIO , P2_KEYHEADERFATT , P2_KEYBODYFATT ) ; + +CREATE TABLE PAF0300F ( + P3_KEYPRGINVIO CHAR(10), + P3_KEYHEADERFATT CHAR(20), + P3_KEYBODYFATT CHAR(50), + P3_FISCIVAPAESE CHAR(2), + P3_FISCIVACODICE CHAR(28), + P3_CODFISC CHAR(16), + P3_ANADENOMI CHAR(80), + P3_ANANOME CHAR(60), + P3_ANACOGNOME CHAR(60), + P3_ANATITOLO CHAR(10), + P3_ANACODEORI CHAR(17), + P3_GESTIONE CHAR(1), + P3_ERRINT CHAR(1), + P3_ERREST CHAR(1)) ; + +ALTER TABLE PAF0300F + ADD CONSTRAINT PAF0300Q + UNIQUE( P3_KEYPRGINVIO , P3_KEYHEADERFATT , P3_KEYBODYFATT ) ; + +CREATE TABLE PAF0400F ( + P4_KEYPRGINVIO CHAR(10), + P4_KEYHEADERFATT CHAR(20), + P4_KEYBODYFATT CHAR(50), + P4_FISCIVAPAESE CHAR(2), + P4_FISCIVACOD CHAR(28), + P4_CODFISC CHAR(16), + P4_ANADENOM CHAR(80), + P4_ANANOME CHAR(60), + P4_ANACOGNOME CHAR(60), + P4_ANATITOLO CHAR(10), + P4_ANACODEORI CHAR(17), + P4_SEDEIND CHAR(60), + P4_SEDENRCIVICO CHAR(8), + P4_SEDECAP NUMERIC(5, 0), + P4_SEDECOMUNE CHAR(60), + P4_SEDEPROV CHAR(2), + P4_SEDENAZ CHAR(2), + P4_GESTIONE CHAR(1), + P4_ERRINT CHAR(1), + P4_ERREST CHAR(1)) ; + +ALTER TABLE PAF0400F + ADD CONSTRAINT PAF0400Q + UNIQUE( P4_KEYPRGINVIO , P4_KEYHEADERFATT , P4_KEYBODYFATT ) ; + +CREATE TABLE PAF0500F ( + P5_KEYPRGINVIO CHAR(10), + P5_KEYHEADERFATT CHAR(20), + P5_KEYBODYFATT CHAR(50), + P5_FISCIVAPAESE CHAR(2), + P5_FISCIVACOD CHAR(28), + P5_CODICEFISC CHAR(16), + P5_ANADENOMIN CHAR(80), + P5_ANANOME CHAR(60), + P5_ANACOGNOME CHAR(60), + P5_ANATITOLO CHAR(10), + P5_ANACODEORI CHAR(17), + P5_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF0500F + ADD CONSTRAINT PAF0500Q + UNIQUE( P5_KEYPRGINVIO , P5_KEYHEADERFATT , P5_KEYBODYFATT ) ; + +CREATE TABLE PAF0600F ( + P6_KEYPRGINVIO CHAR(10), + P6_KEYHEADERFATT CHAR(20), + P6_KEYBODYFATT CHAR(50), + P6_SOGGEMITT CHAR(2), + P6_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF0600F + ADD CONSTRAINT PAF0600Q + UNIQUE( P6_KEYPRGINVIO , P6_KEYHEADERFATT , P6_KEYBODYFATT ) ; + +CREATE TABLE PAF0700F ( + P7_KEYPRGINVIO CHAR(10), + P7_KEYHEADERFATT CHAR(20), + P7_KEYBODYFATT CHAR(50), + P7_TIPODOC CHAR(4), + P7_DIVISA CHAR(3), + P7_DATA DATE, + P7_NUMERO CHAR(20), + P7_TIPORITENUTA CHAR(4), + P7_IMPORTORIT NUMERIC(15, 2), + P7_ALIQUOTARIT NUMERIC(6, 2), + P7_CAUSPAGAM CHAR(1), + P7_NUMEROBOLLO CHAR(14), + P7_IMPORTOBOLLO NUMERIC(15, 2), + P7_GESTIONE CHAR(1), + P7_ERRINT CHAR(1), + P7_ERREST CHAR(1)) ; + +ALTER TABLE PAF0700F + ADD CONSTRAINT PAF0700Q + UNIQUE( P7_KEYPRGINVIO , P7_KEYHEADERFATT , P7_KEYBODYFATT ) ; + +CREATE TABLE PAF0800F ( + P8_KEYPRGINVIO CHAR(10), + P8_KEYHEADERFATT CHAR(20), + P8_KEYBODYFATT CHAR(50), + P8_RIFNUMLINEA NUMERIC(4, 0), + P8_TIPOCASSA CHAR(4), + P8_ALIQCASSA NUMERIC(6, 2), + P8_IMCONTRCASSA NUMERIC(15, 2), + P8_IMPONCASSA NUMERIC(15, 2), + P8_ALIQIVA NUMERIC(6, 2), + P8_RITENUTA CHAR(2), + P8_NATURA CHAR(2), + P8_RIFAMMINIS CHAR(20), + P8_GESTIONE CHAR(1), + P8_ERRINT CHAR(1), + P8_ERREST CHAR(1)) ; + +ALTER TABLE PAF0800F + ADD CONSTRAINT PAF0800Q + UNIQUE( P8_KEYPRGINVIO , P8_KEYHEADERFATT , P8_KEYBODYFATT , P8_RIFNUMLINEA ) ; + +CREATE TABLE PAF0900F ( + P9_KEYPRGINVIO CHAR(10), + P9_KEYHEADERFATT CHAR(20), + P9_KEYBODYFATT CHAR(50), + P9_RIFNUMLINEA NUMERIC(4, 0), + P9_TIPOSCONTO CHAR(2), + P9_PERCSCONTO NUMERIC(6, 2), + P9_IMPSCONTO NUMERIC(15, 2), + P9_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF0900F + ADD CONSTRAINT PAF0900Q + UNIQUE( P9_KEYPRGINVIO , P9_KEYHEADERFATT , P9_KEYBODYFATT , P9_RIFNUMLINEA ) ; + +CREATE TABLE PAF1000F ( + P0_KEYPRGINVIO CHAR(10), + P0_KEYHEADERFATT CHAR(20), + P0_KEYBODYFATT CHAR(50), + P0_RIFNUMLINEA NUMERIC(4, 0), + P0_IDDOC CHAR(20), + P0_DATADOC DATE, + P0_NUMITEM CHAR(20), + P0_COMMESSACONV CHAR(100), + P0_CODCUP CHAR(15), + P0_CODCIG CHAR(15), + P0_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF1000F + ADD CONSTRAINT PAF1000Q + UNIQUE( P0_KEYPRGINVIO , P0_KEYHEADERFATT , P0_KEYBODYFATT , P0_RIFNUMLINEA ) ; + +CREATE TABLE PAF1100F ( + PA_KEYPRGINVIO CHAR(10), + PA_KEYHEADERFATT CHAR(20), + PA_KEYBODYFATT CHAR(50), + PA_RIFNUMLINEA NUMERIC(4, 0), + PA_IDDOC CHAR(20), + PA_DATADOCU DATE, + PA_NUMITEM CHAR(20), + PA_COMMCONVENZ CHAR(100), + PA_CODCUP CHAR(15), + PA_CODCIG CHAR(15), + PA_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF1100F + ADD CONSTRAINT PAF1100Q + UNIQUE( PA_KEYPRGINVIO , PA_KEYHEADERFATT , PA_KEYBODYFATT , PA_RIFNUMLINEA ) ; + +CREATE TABLE PAF1200F ( + PB_KEYPRGINVIO CHAR(10), + PB_KEYHEADERFATT CHAR(20), + PB_KEYBODYFATT CHAR(50), + PB_RIFNUMLINEA NUMERIC(4, 0), + PB_IDDOC CHAR(20), + PB_DATADOCO DATE, + PB_NUMITEM CHAR(20), + PB_COMMCONVENZ CHAR(100), + PB_CODCUP CHAR(15), + PB_CODCIG CHAR(15), + PB_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF1200F + ADD CONSTRAINT PAF1200Q + UNIQUE( PB_KEYPRGINVIO , PB_KEYHEADERFATT , PB_KEYBODYFATT , PB_RIFNUMLINEA ) ; + +CREATE TABLE PAF1300F ( + PC_KEYPRGINVIO CHAR(10), + PC_KEYHEADERFATT CHAR(20), + PC_KEYBODYFATT CHAR(50), + PC_RIFNUMLINEA NUMERIC(4, 0), + PC_IDDOC CHAR(20), + PC_DATADOC DATE, + PC_NUMITEM CHAR(20), + PC_COMMCONVENZ CHAR(100), + PC_CODCUP CHAR(15), + PC_CODCIG CHAR(15), + PC_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF1300F + ADD CONSTRAINT PAF1300Q + UNIQUE( PC_KEYPRGINVIO , PC_KEYHEADERFATT , PC_KEYBODYFATT , PC_RIFNUMLINEA ) ; + +CREATE TABLE PAF1400F ( + PD_KEYPRGINVIO CHAR(10), + PD_KEYHEADERFATT CHAR(20), + PD_KEYBODYFATT CHAR(50), + PD_RIFNUMLINEA NUMERIC(4, 0), + PD_IDDOC CHAR(20), + PD_DATADOC DATE, + PD_NUMITEM CHAR(20), + PD_COMMCONVENZ CHAR(100), + PD_CODCUP CHAR(15), + PD_CODCIG CHAR(15), + PD_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF1400F + ADD CONSTRAINT PAF1400Q + UNIQUE( PD_KEYPRGINVIO , PD_KEYHEADERFATT , PD_KEYBODYFATT , PD_RIFNUMLINEA ) ; + +CREATE TABLE PAF1500F ( + PE_KEYPRGINVIO CHAR(10), + PE_KEYHEADERFATT CHAR(20), + PE_KEYBODYFATT CHAR(50), + PE_RIFFASE NUMERIC(3, 0), + PE_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF1500F + ADD CONSTRAINT PAF1500Q + UNIQUE( PE_KEYPRGINVIO , PE_KEYHEADERFATT , PE_KEYBODYFATT , PE_RIFFASE ) ; + +CREATE TABLE PAF1600F ( + PF_KEYPRGINVIO CHAR(10), + PF_KEYHEADERFATT CHAR(20), + PF_KEYBODYFATT CHAR(50), + PF_NUMDDDT CHAR(20), + PF_DATADDT DATE, + PF_RIFNUMLINEA NUMERIC(4, 0), + PF_GESTIONE CHAR(1), + PF_ERRINT CHAR(1), + PF_ERREST CHAR(1)) ; + +ALTER TABLE PAF1600F + ADD CONSTRAINT PAF1600Q + UNIQUE( PF_KEYPRGINVIO , PF_KEYHEADERFATT , PF_KEYBODYFATT , PF_RIFNUMLINEA ) ; + +CREATE TABLE PAF1700F ( + PG_KEYPRGINVIO CHAR(10), + PG_KEYHEADERFATT CHAR(20), + PG_KEYBODYFATT CHAR(50), + PG_FISCIVAPAESE CHAR(2), + PG_FISCIVACODICE CHAR(28), + PG_CODICEFISCALE CHAR(16), + PG_ANADENOMINAZ CHAR(80), + PG_ANANOME CHAR(60), + PG_ANACOGNOME CHAR(60), + PG_ANATITOLO CHAR(10), + PG_ANACODEORI CHAR(17), + PG_NUMLICGUIDA CHAR(20), + PG_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF1700F + ADD CONSTRAINT PAF1700Q + UNIQUE( PG_KEYPRGINVIO , PG_KEYHEADERFATT , PG_KEYBODYFATT ) ; + +CREATE TABLE PAF1800F ( + PI_KEYPRGINVIO CHAR(10), + PI_KEYHEADERFATT CHAR(20), + PI_KEYBODYFATT CHAR(50), + PI_NUMEROLINEA NUMERIC(4, 0), + PI_TIPOCESSPREST CHAR(2), + PI_DESCRIZIONE CHAR(100), + PI_QUANTITA NUMERIC(21, 8), + PI_UNITAMISURA CHAR(10), + PI_DTINIZIOPER DATE, + PI_DTFINEPER DATE, + PI_PREZZOUNIT NUMERIC(21, 8), + PI_PRZTOTALE NUMERIC(21, 8), + PI_ALIQUOTAIVA NUMERIC(6, 2), + PI_RITENUTA CHAR(2), + PI_NATURA CHAR(2), + PI_RIFAMMINISTR CHAR(20), + PI_GESTIONE CHAR(1), + PI_ERRINT CHAR(1), + PI_ERREST CHAR(1)) ; + +ALTER TABLE PAF1800F + ADD CONSTRAINT PAF1800Q + UNIQUE( PI_KEYPRGINVIO , PI_KEYHEADERFATT , PI_KEYBODYFATT , PI_NUMEROLINEA ) ; + +CREATE TABLE PAF1900F ( + PY_KEYPRGINVIO CHAR(10), + PY_KEYHEADERFATT CHAR(20), + PY_KEYBODYFATT CHAR(50), + PY_KEYNLINEA NUMERIC(4, 0), + PY_KEYNLINAR NUMERIC(4, 0), + PY_TIPOARTICOLO CHAR(35), + PY_VALOREARTICOLO CHAR(35), + PY_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF1900F + ADD CONSTRAINT PAF1900Q + UNIQUE( PY_KEYPRGINVIO , PY_KEYHEADERFATT , PY_KEYBODYFATT , PY_KEYNLINEA , PY_KEYNLINAR ) ; + +CREATE TABLE PAF2000F ( + PJ_KEYPRGINVIO CHAR(10), + PJ_KEYHEADERFATT CHAR(20), + PJ_KEYBODYFATT CHAR(50), + PJ_KEYNLINEA NUMERIC(4, 0), + PJ_KEYNLINAR NUMERIC(4, 0), + PJ_TIPOSCONTO CHAR(2), + PJ_PERCSCONTO NUMERIC(6, 2), + PJ_IMPORTOSCONTO NUMERIC(15, 2), + PJ_GESTIONE CHAR(1)) ; + + ALTER TABLE PAF2000F + ADD CONSTRAINT PAF2000Q + UNIQUE( PJ_KEYPRGINVIO , PJ_KEYHEADERFATT , PJ_KEYBODYFATT ) ; + +CREATE TABLE PAF2100F ( + PK_KEYPRGINVIO CHAR(10), + PK_KEYHEADERFATT CHAR(20), + PK_KEYBODYFATT CHAR(50), + PK_KEYNLINEA NUMERIC(4, 0), + PK_KEYNLINAR NUMERIC(4, 0), + PK_TIPODATO CHAR(10), + PK_RIFDATO CHAR(60), + PK_RIFNUMERO NUMERIC(21, 5), + PK_RIFDATA DATE, + PK_GESTIONE CHAR(1)) ; + + ALTER TABLE PAF2100F + ADD CONSTRAINT PAF2100Q + UNIQUE( PK_KEYPRGINVIO , PK_KEYHEADERFATT , PK_KEYBODYFATT ) ; + +CREATE TABLE PAF2200F ( + PL_KEYPRGINVIO CHAR(10), + PL_KEYHEADERFATT CHAR(20), + PL_KEYBODYFATT CHAR(50), + PL_ALIQUOTAIVA NUMERIC(6, 2), + PL_NATURA CHAR(2), + PL_SPESEACCESS NUMERIC(15, 2), + PL_ARROTONDAM NUMERIC(21, 5), + PL_IMPONIBILE NUMERIC(15, 2), + PL_IMPOSTA NUMERIC(15, 2), + PL_ESIGIVA CHAR(1), + PL_RIFNORMATIVO CHAR(100), + PL_GESTIONE CHAR(1), + PL_ERRINT CHAR(1), + PL_ERREST CHAR(1), + PL_DETRAIBILE NUMERIC(6, 2), + PL_DEDUCIBILE CHAR(2)) ; + + ALTER TABLE PAF2200F + ADD CONSTRAINT PAF2200Q + UNIQUE( PL_KEYPRGINVIO , PL_KEYHEADERFATT , PL_KEYBODYFATT ) ; + +CREATE TABLE PAF2300F ( + PM_KEYPRGINVIO CHAR(10), + PM_KEYHEADERFATT CHAR(20), + PM_KEYBODYFATT CHAR(50), + PM_DATA DATE, + PM_TOTALEPERCORSO CHAR(15), + PM_GESTIONE CHAR(1), + PM_ERRINT CHAR(1), + PM_ERREST CHAR(1)) ; + +ALTER TABLE PAF2300F + ADD CONSTRAINT PAF2300Q + UNIQUE( PM_KEYPRGINVIO , PM_KEYHEADERFATT , PM_KEYBODYFATT ) ; + +CREATE TABLE PAF2400F ( + PN_KEYPRGINVIO CHAR(10), + PN_KEYHEADERFATT CHAR(20), + PN_KEYBODYFATT CHAR(50), + PN_RIGA NUMERIC(4, 0), + PN_CONDPAGAMENTO CHAR(4), + PN_GESTIONE CHAR(1), + PN_ERRINT CHAR(1), + PN_ERREST CHAR(1)) ; + +ALTER TABLE PAF2400F + ADD CONSTRAINT PAF2400Q + UNIQUE( PN_KEYPRGINVIO , PN_KEYHEADERFATT , PN_KEYBODYFATT , PN_RIGA ) ; + +CREATE TABLE PAF2500F ( + PO_KEYPRGINVIO CHAR(10), + PO_KEYHEADERFATT CHAR(20), + PO_KEYBODYFATT CHAR(50), + PO_RIGA NUMERIC(4, 0), + PO_CONDPAGAMENTO CHAR(4), + PO_BENEFICIARIO CHAR(200), + PO_MODALITAPAGAM CHAR(4), + PO_DATARIFTERM DATE, + PO_GGTERMINIPAG NUMERIC(3, 0), + PO_DATASCADENZA DATE, + PO_IMPORTO NUMERIC(15, 2), + PO_CODUFFPOST CHAR(20), + PO_COGNOMEQUIET CHAR(60), + PO_NOMEQUIET CHAR(60), + PO_CFQUIETANZA CHAR(16), + PO_TITOLOQUIET CHAR(10), + PO_ISTFINANZ CHAR(80), + PO_IBAN CHAR(34), + PO_ABI NUMERIC(5, 0), + PO_CAB NUMERIC(5, 0), + PO_BIC CHAR(11), + PO_SCPAGANTIC NUMERIC(15, 2), + PO_DTLIMANTIC DATE, + PO_PENALITAPAGAM NUMERIC(15, 2), + PO_DATADECORRP DATE, + PO_CODICEPAGAM CHAR(15), + PO_GESTIONE CHAR(1), + PO_ERRINT CHAR(1), + PO_ERREST CHAR(1)) ; + + ALTER TABLE PAF2500F + ADD CONSTRAINT PAF2500Q + UNIQUE( PO_KEYPRGINVIO , PO_KEYHEADERFATT , PO_KEYBODYFATT ) ; + +CREATE TABLE PAF2600F ( + PP_KEYPRGINVIO CHAR(10), + PP_KEYHEADERFATT CHAR(20), + PP_KEYBODYFATT CHAR(50), + PP_NUMEROLINEA NUMERIC(4, 0), + PP_NOMEATTACHMENT CHAR(60), + PP_COMPRESSIONE CHAR(10), + PP_FMTATTACHMENT CHAR(10), + PP_DESCATTACHMENT CHAR(100), + PP_ATTACHMENT CHAR(255), + PP_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF2600F + ADD CONSTRAINT PAF2600Q + UNIQUE( PP_KEYPRGINVIO , PP_KEYHEADERFATT , PP_KEYBODYFATT , PP_NUMEROLINEA ) ; + +CREATE TABLE PAF2700F ( + PQ_KEYPRGINVIO CHAR(10), + PQ_KEYHEADERFATT CHAR(20), + PQ_KEYBODYFATT CHAR(50), + PQ_IMPTOTDOC NUMERIC(15, 2), + PQ_ARROTOND NUMERIC(15, 2), + PQ_CAUSALE CHAR(200), + PQ_ART73 CHAR(2), + PQ_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF2700F + ADD CONSTRAINT PAF2700Q + UNIQUE( PQ_KEYPRGINVIO , PQ_KEYHEADERFATT , PQ_KEYBODYFATT ) ; + +CREATE TABLE PAF2800F ( + PR_KEYPRGINVIO CHAR(10), + PR_KEYHEADERFATT CHAR(20), + PR_KEYBODYFATT CHAR(50), + PR_MEZZOTRASP CHAR(80), + PR_CAUSALETRASP CHAR(100), + PR_NUMCOLLI NUMERIC(4, 0), + PR_DESCRIZIONE CHAR(100), + PR_UMPESO CHAR(10), + PR_PESOLORDO NUMERIC(7, 2), + PR_PESONETTO NUMERIC(7, 2), + PR_DATAORARIT DATE, + PR_DATAUNIZIO DATE, + PR_TIPORESA CHAR(3), + PR_INDIRIZZORESA CHAR(60), + PR_NRCIVICORESA CHAR(8), + PR_CAPRESA NUMERIC(5, 0), + PR_COMUNERESA CHAR(60), + PR_PROVINCIARESA CHAR(2), + PR_NAZIONERESA CHAR(2), + PR_DATAORACON DATE, + PR_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF2800F + ADD CONSTRAINT PAF2800Q + UNIQUE( PR_KEYPRGINVIO , PR_KEYHEADERFATT , PR_KEYBODYFATT ) ; + +CREATE TABLE PAF2900F ( + PS_KEYPRGINVIO CHAR(10), + PS_KEYHEADERFATT CHAR(20), + PS_KEYBODYFATT CHAR(50), + PS_NORMARIFER CHAR(100), + PS_NUMFATTPRINC CHAR(20), + PS_DATAFATTPRINC DATE, + PS_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF2900F + ADD CONSTRAINT PAF2900Q + UNIQUE( PS_KEYPRGINVIO , PS_KEYHEADERFATT , PS_KEYBODYFATT ) ; + +CREATE TABLE PAF3000F ( + PT_KEYPRGINVIO CHAR(10), + PT_KEYHEADERFATT CHAR(20), + PT_KEYBODYFATT CHAR(50), + PT_RIFNUMLINEA NUMERIC(4, 0), + PT_COMMENTO VARCHAR, + PT_GESTIONE CHAR(1)) ; + +ALTER TABLE PAF3000F + ADD CONSTRAINT PAF3000Q + UNIQUE( PT_KEYPRGINVIO , PT_KEYHEADERFATT , PT_KEYBODYFATT , PT_RIFNUMLINEA ) ; + +CREATE TABLE PAF3100F ( + PH_KEYPRGINVIO CHAR(10), + PH_KEYHEADERFATT CHAR(20), + PH_KEYBODYFATT CHAR(50), + PH_STABORGIND CHAR(60), + PH_STABORGNRCIVICO CHAR(8), + PH_STABORGCAP NUMERIC(5, 0), + PH_STABORGCOMUNE CHAR(60), + PH_STABORGPROV CHAR(2), + PH_STABORGNAZ CHAR(2), + PH_FISCIVAPAESE CHAR(2), + PH_FISCIVACODICE CHAR(28), + PH_ANADENOMI CHAR(80), + PH_ANANOME CHAR(60), + PH_ANACOGNOME CHAR(60), + PH_GESTIONE CHAR(1), + PH_ERRINT CHAR(1), + PH_ERREST CHAR(1)) ; + +ALTER TABLE PAF3100F + ADD CONSTRAINT PAF3100Q + UNIQUE( PH_KEYPRGINVIO , PH_KEYHEADERFATT , PH_KEYBODYFATT ) ; + +CREATE TABLE PAF3200F ( + PU_KEYPRGINVIO CHAR(10), + PU_KEYHEADERFATT CHAR(20), + PU_KEYBODYFATT CHAR(50), + PU_PEC CHAR(255), + PU_GESTIONE CHAR(1), + PU_ERRINT CHAR(1), + PU_ERREST CHAR(1)) ; + +ALTER TABLE PAF3200F + ADD CONSTRAINT PAF3200Q + UNIQUE( PU_KEYPRGINVIO , PU_KEYHEADERFATT , PU_KEYBODYFATT ) ; + +CREATE TABLE PAFLD00K ( + PZNFIL CHAR(10), + PZNFLD CHAR(10), + PZDFLD CHAR(35), + PZNPOS NUMERIC(3, 0), + PZTDAT CHAR(8), + PZNLEN NUMERIC(5, 0), + PZNDEC NUMERIC(5, 0), + PZDFIL CHAR(50), + PZFGES CHAR(1), + PZFILL CHAR(255)) ; + +CREATE TABLE PAFW300F ( + PW_KEYPRGINVIO CHAR(10), + PW_KEYHEADERFATT CHAR(20), + PW_KEYBODYFATT CHAR(50), + PW_TIPODOC CHAR(4), + PW_TIPONUM CHAR(4), + PW_NUMERO CHAR(20), + PW_DATA DATE, + PW_CODSDI CHAR(10), + PW_CLIENTE CHAR(10), + PW_RAGSOC CHAR(35), + PW_PAESE CHAR(2), + PW_CODICE CHAR(28), + PW_CFISCA CHAR(16), + PW_DENOM CHAR(80), + PW_NOME CHAR(60), + PW_COGN CHAR(60), + PW_CDEST CHAR(7), + PW_IMPO NUMERIC(15, 2), + PW_FNOT CHAR(1), + PW_CXML CHAR(255), + PW_CXMLP CHAR(255), + PW_UPAG DATE, + CONSTRAINT PAFW300Q PRIMARY KEY( PW_KEYHEADERFATT , PW_KEYBODYFATT , PW_TIPODOC , PW_TIPONUM , PW_NUMERO , PW_DATA ) ) ; + +CREATE TABLE PANUM00F ( + PJNKEY CHAR(5), + PJNINV CHAR(10), + PJCPER CHAR(255), + PJFILL CHAR(255)) ; + + + +/* INDICI */ + +CREATE INDEX FPCDD01I + ON FPCDD00F ( PV_AMBIENTE ASC ) + ; + +CREATE INDEX FPCDE01I + ON FPCDE00F ( PX_CODDEST ASC , PX_FISCIVAPAESE ASC , PX_FISCIVACOD ASC , PX_CODFISCALE ASC ) + ; + +CREATE INDEX FPPRO01I + ON FPPRO00F ( PZ_KEYPRGINVIO ASC , PZ_KEYHEADERFATT ASC , PZ_KEYBODYFATT ASC ) + ; + +CREATE INDEX FPPRO02I + ON FPPRO00F ( PZ_KEYPRGINVIO ASC , PZ_KEYHEADERFATT ASC , PZ_TIPODOC ASC , PZ_NUMERO ASC , PZ_DATA ASC ) + ; + +CREATE INDEX PAA0101I + ON PAA0100F ( P1_KEYPRGINVIO ASC , P1_KEYHEADERFATT ASC , P1_KEYBODYFATT ASC , P1_DATAORARIC ASC ) + ; + +CREATE INDEX PAA0201I + ON PAA0200F ( P2_KEYPRGINVIO ASC , P2_KEYHEADERFATT ASC , P2_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA0301I + ON PAA0300F ( P3_KEYPRGINVIO ASC , P3_KEYHEADERFATT ASC , P3_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA0401I + ON PAA0400F ( P4_KEYPRGINVIO ASC , P4_KEYHEADERFATT ASC , P4_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA0501I + ON PAA0500F ( P5_KEYPRGINVIO ASC , P5_KEYHEADERFATT ASC , P5_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA0601I + ON PAA0600F ( P6_KEYPRGINVIO ASC , P6_KEYHEADERFATT ASC , P6_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA0701I + ON PAA0700F ( P7_KEYPRGINVIO ASC , P7_KEYHEADERFATT ASC , P7_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA0801I + ON PAA0800F ( P8_KEYPRGINVIO ASC , P8_KEYHEADERFATT ASC , P8_KEYBODYFATT ASC , P8_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAA0901I + ON PAA0900F ( P9_KEYPRGINVIO ASC , P9_KEYHEADERFATT ASC , P9_KEYBODYFATT ASC , P9_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAA1001I + ON PAA1000F ( P0_KEYPRGINVIO ASC , P0_KEYHEADERFATT ASC , P0_KEYBODYFATT ASC , P0_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAA1101I + ON PAA1100F ( PA_KEYPRGINVIO ASC , PA_KEYHEADERFATT ASC , PA_KEYBODYFATT ASC , PA_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAA1201I + ON PAA1200F ( PB_KEYPRGINVIO ASC , PB_KEYHEADERFATT ASC , PB_KEYBODYFATT ASC , PB_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAA1301I + ON PAA1300F ( PC_KEYPRGINVIO ASC , PC_KEYHEADERFATT ASC , PC_KEYBODYFATT ASC , PC_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAA1401I + ON PAA1400F ( PD_KEYPRGINVIO ASC , PD_KEYHEADERFATT ASC , PD_KEYBODYFATT ASC , PD_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAA1501I + ON PAA1500F ( PE_KEYPRGINVIO ASC , PE_KEYHEADERFATT ASC , PE_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA1601I + ON PAA1600F ( PF_KEYPRGINVIO ASC , PF_KEYHEADERFATT ASC , PF_KEYBODYFATT ASC , PF_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAA1701I + ON PAA1700F ( PG_KEYPRGINVIO ASC , PG_KEYHEADERFATT ASC , PG_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA1801I + ON PAA1800F ( PI_KEYPRGINVIO ASC , PI_KEYHEADERFATT ASC , PI_KEYBODYFATT ASC , PI_NUMEROLINEA ASC ) + ; + +CREATE INDEX PAA1901I + ON PAA1900F ( PY_KEYPRGINVIO ASC , PY_KEYHEADERFATT ASC , PY_KEYBODYFATT ASC , PY_KEYNLINEA ASC ) + ; + +CREATE INDEX PAA2001I + ON PAA2000F ( PJ_KEYPRGINVIO ASC , PJ_KEYHEADERFATT ASC , PJ_KEYBODYFATT ASC , PJ_KEYNLINEA ASC , PJ_KEYNLINAR ASC ) + ; + +CREATE INDEX PAA2101I + ON PAA2100F ( PK_KEYPRGINVIO ASC , PK_KEYHEADERFATT ASC , PK_KEYBODYFATT ASC , PK_KEYNLINEA ASC ) + ; + +CREATE INDEX PAA2201I + ON PAA2200F ( PL_KEYPRGINVIO ASC , PL_KEYHEADERFATT ASC , PL_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA2301I + ON PAA2300F ( PM_KEYPRGINVIO ASC , PM_KEYHEADERFATT ASC , PM_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA2401I + ON PAA2400F ( PN_KEYPRGINVIO ASC , PN_KEYHEADERFATT ASC , PN_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA2501I + ON PAA2500F ( PO_KEYPRGINVIO ASC , PO_KEYHEADERFATT ASC , PO_KEYBODYFATT ASC , PO_RIGA ASC ) + ; + +CREATE INDEX PAA2601I + ON PAA2600F ( PP_KEYPRGINVIO ASC , PP_KEYHEADERFATT ASC , PP_KEYBODYFATT ASC , PP_NUMEROLINEA ASC ) + ; + +CREATE INDEX PAA2701I + ON PAA2700F ( PQ_KEYPRGINVIO ASC , PQ_KEYHEADERFATT ASC , PQ_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA2801I + ON PAA2800F ( PR_KEYPRGINVIO ASC , PR_KEYHEADERFATT ASC , PR_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA2901I + ON PAA2900F ( PS_KEYPRGINVIO ASC , PS_KEYHEADERFATT ASC , PS_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA3001I + ON PAA3000F ( PT_KEYPRGINVIO ASC , PT_KEYHEADERFATT ASC , PT_KEYBODYFATT ASC , PT_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAA3101I + ON PAA3100F ( PH_KEYPRGINVIO ASC , PH_KEYHEADERFATT ASC , PH_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAA3201I + ON PAA3200F ( PU_KEYPRGINVIO ASC , PU_KEYHEADERFATT ASC , PU_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0101I + ON PAF0100F ( P1_KEYHEADERFATT ASC , P1_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0102I + ON PAF0100F ( P1_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0103I + ON PAF0100F ( P1_KEYPRGINVIO ASC , P1_KEYHEADERFATT ASC , P1_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0201I + ON PAF0200F ( P2_KEYHEADERFATT ASC , P2_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0301I + ON PAF0300F ( P3_KEYHEADERFATT ASC , P3_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0401I + ON PAF0400F ( P4_KEYHEADERFATT ASC , P4_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0501I + ON PAF0500F ( P5_KEYHEADERFATT ASC , P5_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0601I + ON PAF0600F ( P6_KEYHEADERFATT ASC , P6_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0701I + ON PAF0700F ( P7_KEYHEADERFATT ASC , P7_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF0801I + ON PAF0800F ( P8_KEYHEADERFATT ASC , P8_KEYBODYFATT ASC , P8_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAF0901I + ON PAF0900F ( P9_KEYHEADERFATT ASC , P9_KEYBODYFATT ASC , P9_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAF1001I + ON PAF1000F ( P0_KEYHEADERFATT ASC , P0_KEYBODYFATT ASC , P0_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAF1101I + ON PAF1100F ( PA_KEYHEADERFATT ASC , PA_KEYBODYFATT ASC , PA_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAF1201I + ON PAF1200F ( PB_KEYHEADERFATT ASC , PB_KEYBODYFATT ASC , PB_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAF1301I + ON PAF1300F ( PC_KEYHEADERFATT ASC , PC_KEYBODYFATT ASC , PC_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAF1401I + ON PAF1400F ( PD_KEYHEADERFATT ASC , PD_KEYBODYFATT ASC , PD_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAF1501I + ON PAF1500F ( PE_KEYHEADERFATT ASC , PE_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF1601I + ON PAF1600F ( PF_KEYHEADERFATT ASC , PF_KEYBODYFATT ASC , PF_RIFNUMLINEA ASC ) + ; + +CREATE INDEX PAF1701I + ON PAF1700F ( PG_KEYHEADERFATT ASC , PG_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF1801I + ON PAF1800F ( PI_KEYHEADERFATT ASC , PI_KEYBODYFATT ASC , PI_NUMEROLINEA ASC ) + ; + +CREATE INDEX PAF1901I + ON PAF1900F ( PY_KEYHEADERFATT ASC , PY_KEYBODYFATT ASC , PY_KEYNLINEA ASC ) + ; + +CREATE INDEX PAF2001I + ON PAF2000F ( PJ_KEYHEADERFATT ASC , PJ_KEYBODYFATT ASC , PJ_KEYNLINEA ASC , PJ_KEYNLINAR ASC ) + ; + +CREATE INDEX PAF2101I + ON PAF2100F ( PK_KEYHEADERFATT ASC , PK_KEYBODYFATT ASC , PK_KEYNLINEA ASC ) + ; + +CREATE INDEX PAF2201I + ON PAF2200F ( PL_KEYHEADERFATT ASC , PL_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF2301I + ON PAF2300F ( PM_KEYHEADERFATT ASC , PM_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF2401I + ON PAF2400F ( PN_KEYHEADERFATT ASC , PN_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF2501I + ON PAF2500F ( PO_KEYHEADERFATT ASC , PO_KEYBODYFATT ASC , PO_RIGA ASC ) + ; + +CREATE INDEX PAF2601I + ON PAF2600F ( PP_KEYHEADERFATT ASC , PP_KEYBODYFATT ASC , PP_NUMEROLINEA ASC ) + ; + +CREATE INDEX PAF2701I + ON PAF2700F ( PQ_KEYHEADERFATT ASC , PQ_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF2801I + ON PAF2800F ( PR_KEYHEADERFATT ASC , PR_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF2901I + ON PAF2900F ( PS_KEYHEADERFATT ASC , PS_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF3101I + ON PAF3100F ( PH_KEYHEADERFATT ASC , PH_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAF3201I + ON PAF3200F ( PU_KEYHEADERFATT ASC , PU_KEYBODYFATT ASC ) + ; + +CREATE INDEX PAFW301L + ON PAFW300F ( PW_KEYHEADERFATT ASC , PW_KEYBODYFATT ASC , PW_TIPODOC ASC , PW_TIPONUM ASC , PW_NUMERO ASC , PW_DATA ASC ) + ; \ No newline at end of file diff --git a/src/include/applicat.cpp b/src/include/applicat.cpp index 9a6db80f7..f420d7fbc 100755 --- a/src/include/applicat.cpp +++ b/src/include/applicat.cpp @@ -406,8 +406,15 @@ const char* TApplication::get_module_name() const } if (!ok) { - cantaccess_box(module); - module.cut(0); + if(is_power_station()) + { + warning_box("Attenzione! Non sei abilitato per l'utilizzo del modulo %s", static_cast(module)); + } + else + { + cantaccess_box(module); + module.cut(0); + } } } } diff --git a/src/include/campo.aut b/src/include/campo.aut index 464a50487..3c468827e 100755 --- a/src/include/campo.aut +++ b/src/include/campo.aut @@ -19,7 +19,7 @@ at AVIS Provinciale in Elenchi Intracomunitari po Penna Ottica ab Analisi di bilancio -pa Fatturazione elettronica pubblica amministrazione +pa Fattura PA ca Contabilità Analitica sl Stato Avanzamento Lavori ic IVA per cassa @@ -35,7 +35,7 @@ or Ordini ef Effetti db Distinta Base pr Provvigioni Agenti -?? Modulo vario ex-cu Codice Unico Progetto +fp Fatturazione tra Privati + PA sv Statistiche di Vendita mr Manufacturing Resource Planning ?? Modulo vario ex-ec Collegamento E-commerce @@ -46,6 +46,5 @@ l2 Lavanderie 02 bs Bee Store ha Hardy Caffè ri Riclassificazioni -vd Vendita al dettaglio -gv Gestione versamenti F24 -tf Trasferimento fatture \ No newline at end of file +gv Gestione versamenti +tf Trasferimento Fatture \ No newline at end of file diff --git a/src/include/modaut.h b/src/include/modaut.h index 1a7b3d78b..8968daa39 100755 --- a/src/include/modaut.h +++ b/src/include/modaut.h @@ -37,7 +37,7 @@ #define EFAUT 34 #define DBAUT 35 #define PRAUT 36 -//#define CUAUT 37 Obsoleta CUP implicita in CT (1) +#define FPAUT 37 #define SVAUT 38 #define MRAUT 39 #define ECAUT 40 diff --git a/src/include/msksheet.cpp b/src/include/msksheet.cpp index 128dcc74f..c02199282 100755 --- a/src/include/msksheet.cpp +++ b/src/include/msksheet.cpp @@ -278,7 +278,7 @@ protected: // @cmember Ritorna la posizione della colonna con identificatore

int cid2col(short cid) const; // @cmember Ritorna la colonna logica con identificatore

- int cid2index(short cid) const; + static int cid2index(short cid); // @cmember Ritorna la colonna corrispondente al campo

della maschera int field2col(const TOperable_field* f) const; @@ -804,10 +804,9 @@ int TSpreadsheet::cid2col(short cid) const return 0; } -int TSpreadsheet::cid2index(short cid) const +int TSpreadsheet::cid2index(short cid) { - CHECKD(cid >= FIRST_FIELD, "Bad column id ", cid); - return (cid % 100) - 1; + return xvtil_cid2index(cid); } int TSpreadsheet::field2col(const TOperable_field* f) const diff --git a/src/include/tsdb.cpp b/src/include/tsdb.cpp index 45fa207d1..806994eee 100644 --- a/src/include/tsdb.cpp +++ b/src/include/tsdb.cpp @@ -6,7 +6,7 @@ * Classe per esecuzioni di query temporanee (wrapper semplice per SACommand) * ******************************************************************************/ -const TDate SSimpleQuery::sqGetDate(const char * field) +const TDate SSimple_query::sq_get_date(const char * field) { const TDate app(_rec.get_date(field)); return app; diff --git a/src/include/tsdb.h b/src/include/tsdb.h index 9852f46e9..6d1d8eba4 100644 --- a/src/include/tsdb.h +++ b/src/include/tsdb.h @@ -63,7 +63,7 @@ * Preferisco scrivere un po' di codice ridondante adesso che andare a fare * * salti mortali dopo * ********************************************************************************/ -class SSimpleQuery +class SSimple_query { protected: TXvt_recordset _rec; @@ -72,114 +72,115 @@ protected: public: /**< Costruttore, non inizializza nulla, da caricare successivamente */ - SSimpleQuery() {} + SSimple_query() = default; /**< Costruttore, Accetta in ingresso dei parametri per la connessione, volendo è anche possibile impostare una query ed eseguirla. Attenzione! Non risponde se la query ha avuto un esito positivo o negativo! */ - SSimpleQuery(const char* db, const char* user, const char* pass, TT_driver tipoDb, const char * query = "", const bool ex = false, const bool freezed = false) : _rec(db, user, pass, tipoDb, query, ex, freezed) {} + SSimple_query(const char* db, const char* user, const char* pass, TT_driver tipoDb, const char * query = "", const bool ex = false, const bool freezed = false) : _rec(db, user, pass, tipoDb, query, ex, freezed) {} + //SSimpleQuery(const TString& db, const TString& user, const TString& pass, TT_driver tipoDb, const char * query = "", const bool ex = false, const bool freezed = false) : _rec(db, user, pass, tipoDb, query, ex, freezed) {} /**< Distruttore */ - virtual ~SSimpleQuery() {} + virtual ~SSimple_query() = default; // Connection functions /**< Eseguo la connessione */ - int sqConnect(const char* db, const char* user, const char* pass, TT_driver tipoDb) { return _rec.connect(db, user, pass, tipoDb); } + int sq_connect(const char* db, const char* user, const char* pass, TT_driver tipoDb) { return _rec.connect(db, user, pass, tipoDb); } /* Mi scollego */ - void sqDisconnect() { _rec.disconnect(); } + void sq_disconnect() { _rec.disconnect(); } /**< Esegue la commit, di default in caso di errore viene chiamato il metodo rollback() */ - const bool sqCommit(bool autoRoll = true) { return _rec.commit(); } + const bool sq_commit(bool autoRoll = true) { return _rec.commit(); } /**< Esegue il rollback all'ultimo commit */ - const bool sqRollback() { _rec.rollback(); } + const bool sq_rollback() { return _rec.rollback(); } /**< Imposto il tipo di client che utilizzo */ - void sqSetClient(int client) { _rec.setClient((TT_driver)client); } - void sqSetClient(TT_driver client) { _rec.setClient(client); } + void sq_set_client(int client) { _rec.setClient((TT_driver)client); } + void sq_set_client(TT_driver client) { _rec.setClient(client); } // Imposto una opzione generica dellla connessione - void sqSetConOption(const char* opt) { _rec.setConOption(opt); } + void sq_set_con_option(const char* opt) { _rec.setConOption(opt); } /**< Abilito/Disabilito l'autocommit, (disabilitato di default) */ - void sqSetAutocommit(bool ac) { _rec.setAutocommit(ac); } + void sq_set_autocommit(bool ac) { _rec.setAutocommit(ac); } /** Imposta la visibilità delle transazioni (vedi Funzione) */ - void sqSetVisibility(isoLvl vis = committed) { _rec.setVisibility(vis); } + void sq_set_visibility(isoLvl vis = committed) { _rec.setVisibility(vis); } // Getters /** Ritorna se la conessione è connessa */ - const bool sqIsConnect() const { return _rec.isConnect(); } + const bool sq_is_connect() const { return _rec.isConnect(); } /**< Ritorna se la connessione è attiva */ - const bool sqIsAlive() const { return _rec.isAlive(); } + const bool sq_is_alive() const { return _rec.isAlive(); } /** Ritorna la visibilità impostata */ - const int sqGetVisibility() { return _rec.getVisibility(); } + const int sq_get_visibility() { return _rec.getVisibility(); } /**< Ritorna se è attivo l'autocommit, true -> attivo, false -> disattivo o sconosciuto */ - const bool sqGetAutocommit() { return _rec.getAutocommit(); } + const bool sq_get_autocommit() { return _rec.getAutocommit(); } /**< Ritorna il valore dell'opzione specificata */ - const char* sqGetOption(const char* opt) { return _rec.getOption(opt); } + const char* sq_get_option(const char* opt) { return _rec.getOption(opt); } /**< Ritorno la versione del Client che sto utilizzando */ - const long sqGetClientV() { return _rec.getClientV(); } + const long sq_get_client_v() { return _rec.getClientV(); } /**< Ritorno la versione del Server che sto utilizzando */ - const char* sqGetServerV() { return _rec.getServerV(); } + const char* sq_get_server_v() { return _rec.getServerV(); } /**< Ritorno la versione del Server che sto utilizzando in formato numerico */ - const long sqGetServerVN() { return _rec.getServerVN(); } + const long sq_get_server_vn() { return _rec.getServerVN(); } /**< Ritorno se il recordset è carico */ - const bool sqIsLoaded() const { return _rec.isLoaded(); } + const bool sq_is_loaded() const { return _rec.isLoaded(); } /** Ritorno il numero di elementi nella query */ - const long sqItems() { _rec.items(); } + const long sq_items() { return _rec.items(); } // Conguration /**< Imposta la query ricevuta come (const char *) nel recordset */ - const bool sqSet(const char* query) { return _rec.set(query); } + const bool sq_set(const char* query) { return _rec.set(query); } /**< Imposta la query ricevuta come (string) nel recordset */ - const bool sqSet(string query) { return _rec.set(query.c_str()); } + const bool sq_set(string query) { return _rec.set(query.c_str()); } /**< Imposta la query ricevuta come (TString) nel recordset */ - const bool sqSet(TString& query) { return _rec.set(static_cast(query)); } + const bool sq_set(TString& query) { return _rec.set(static_cast(query)); } /**< Esegue la query impostata nel recordset, se viene passato autoF == true esegue anche un comando sqNext() */ - const bool sqExec(bool autoF = true) { return _rec.exec(autoF); } + const bool sq_exec(bool autoF = true) { return _rec.exec(autoF); } /**< Unisce le funzioni sqSet e sqExec, riceve la query come (const char *) */ - const bool sqSetExec(const char* query, bool autoF = true) { _rec.set(query); return _rec.exec(autoF); } + const bool sq_set_exec(const char* query, bool autoF = true) { _rec.set(query); return _rec.exec(autoF); } /**< Unisce le funzioni sqSet e sqExec, riceve la query come (string) */ - const bool sqSetExec(string query, bool autoF = true) { _rec.set(query.c_str()); return _rec.exec(autoF); } + const bool sq_set_exec(string query, bool autoF = true) { _rec.set(query.c_str()); return _rec.exec(autoF); } /**< Unisce le funzioni sqSet e sqExec, riceve la query come (TString) */ - const bool sqSetExec(TString& query, bool autoF = true); + const bool sq_set_exec(TString& query, bool autoF = true) { return sq_set_exec(static_cast(query), autoF); } /**< Si sposta avanti di un record, in caso di esito negativo valorizza _stringError e _codeError */ - const bool sqNext() { return _rec.next(); } + const bool sq_next() { return _rec.next(); } /**< Si sposta indietro di un record, in caso di esito negativo valorizza _stringError e _codeError */ - const bool sqPrev() { return _rec.prev(); } + const bool sq_prev() { return _rec.prev(); } /**< Si sposta avanti di un record, in caso di esito negativo valorizza _stringError e _codeError */ - const bool sqFirst() { return _rec.first(); } + const bool sq_first() { return _rec.first(); } /**< Si sposta al primo record, in caso di esito negativo valorizza _stringError e _codeError */ - const bool sqLast() { return _rec.last(); } + const bool sq_last() { return _rec.last(); } /**< Si sposta alla posizione n, in caso di esito negativo valorizza _stringError e _codeError */ - const bool sqGo(int newPos) { return _rec.go(newPos); } + const bool sq_go(int newPos) { return _rec.go(newPos); } /**< Ritorna il numero di righe affette dall'ultima query */ - const int sqRowsAffected() { return _rec.rowsAffected(); } + const int sq_rows_affected() { return _rec.rowsAffected(); } // Getters /**< Ritorna il valore nel campo (field) in formato (int) */ - const int sqGetInt(const char* field) { return _rec.get_int(field); } + const int sq_get_int(const char* field) { return _rec.get_int(field); } /**< Ritorna il valore nel campo (field) in formato (short) */ - const short sqGetShort(const char* field) { return _rec.get_short(field); } + const short sq_get_short(const char* field) { return _rec.get_short(field); } /**< Ritorna il valore nel campo (field) in formato (long) */ - const long sqGetLong(const char* field) { return _rec.get_long(field); } + const long sq_get_long(const char* field) { return _rec.get_long(field); } /**< Ritorna il valore nel campo (field) in formato (double) */ - const double sqGetDouble(const char* field) { return _rec.get_double(field); } + const double sq_get_double(const char* field) { return _rec.get_double(field); } /**< Ritorna il valore nel campo (field) in formato (bool) */ - const bool sqGetBool(const char* field) { return _rec.get_bool(field); } + const bool sq_get_bool(const char* field) { return _rec.get_bool(field); } /**< Ritorna il valore nel campo (field) in formato (TDate) */ - const TDate sqGetDate(const char* field); + const TDate sq_get_date(const char* field); /**< Ritorna il valore nel campo (field) in formato (real) */ - const real sqGetReal(const char* field); + const real sq_get_real(const char* field); /**< Ritorna il valore nel campo (field) in formato (SADateTime), Campo non gestisce le ore */ //SADateTime sqGetDateTime(const char* field) { get_short(field); } /**< Ritorna il valore nel campo (field) passato come (const char *) in formato (const char *) */ - const char* sqGet(const char* field) { return _rec.get(field); } + const char* sq_get(const char* field) { return _rec.get(field); } /**< Ritorna il valore nel campo (field) passato come (string) in formato (const char *) */ - const char* sqGet(string field) { return _rec.get(field.c_str()); } + const char* sq_get(string field) { return _rec.get(field.c_str()); } /**< Ritorna il valore nel campo (field) passato come (TString) in formato (const char *) */ - const char* sqGet(TString& field) { return _rec.get(static_cast(field)); } + const char* sq_get(TString& field) { return _rec.get(static_cast(field)); } /**< Ritorna il valore nel campo (field) in formato (char) */ - const char sqGetChar(const char* field) { return _rec.get_char(field); } + const char sq_get_char(const char* field) { return _rec.get_char(field); } /**< Ritorna la posizione attuale */ - const long sqPos() const { return _rec.pos(); } + const long sq_pos() const { return _rec.pos(); } // Error Getters /**< Ritorno l'ultimo codice errore segnalato in formato /int) */ - const long sqGetCodeError(bool erase = true) { return _rec.get_code_error(erase); } + const long sq_get_code_error(bool erase = true) { return _rec.get_code_error(erase); } /**< Ritorno l'ultima stringa di errore segnalato in formato (const char *) */ - const char* sqGetStringError(bool erase = true) { return _rec.get_string_error(erase); } + const char* sq_get_string_error(bool erase = true) { return _rec.get_string_error(erase); } //char * getCharPointer(const char * field) { return const_cast(static_cast(recset.Field(field).asString())); } }; diff --git a/src/include/utility.cpp b/src/include/utility.cpp index 710d73ca6..43f9a9c4b 100755 --- a/src/include/utility.cpp +++ b/src/include/utility.cpp @@ -707,3 +707,13 @@ void quoted_string(TString& query, const char* val) } query << '\''; } + +TString& to_tstring(long n) +{ + return get_tmp_string().cut(0) << n; +} + +TString& to_tstring(int n) +{ + return to_tstring(static_cast(n)); +} diff --git a/src/include/utility.h b/src/include/utility.h index fcb3f581e..947523a19 100755 --- a/src/include/utility.h +++ b/src/include/utility.h @@ -73,4 +73,7 @@ void quoted_string(TString& query, const char* val); inline const char* get_iva_sirio() // Ritorna la partita IVA della Sirio { return "04879210963"; } +TString& to_tstring(long n); +TString& to_tstring(int n); + #endif /* __UTILITY_H */ diff --git a/src/include/xvtility.cpp b/src/include/xvtility.cpp index 68656c66c..5ea294f25 100755 --- a/src/include/xvtility.cpp +++ b/src/include/xvtility.cpp @@ -9,7 +9,8 @@ #include #include -#include +#include +#include short CHARX = 8; short CHARY = 14; @@ -842,3 +843,8 @@ PEN_STYLE trans_pen( return ps; } +int xvtil_cid2index(const int cid) +{ + CHECKD(cid >= FIRST_FIELD, "Bad column id ", cid); + return (cid % 100) - 1; +} diff --git a/src/include/xvtility.h b/src/include/xvtility.h index 6cd1e60f1..f559879ed 100755 --- a/src/include/xvtility.h +++ b/src/include/xvtility.h @@ -45,6 +45,8 @@ bool xvtil_popup_warning(const char* msg); bool xvtil_popup_error(const char* msg); bool xvtil_system_error(unsigned long lasterror, ...); +int xvtil_cid2index(const int cid); + void beep(int severity = 0); void do_events(); diff --git a/src/ve/velib.h b/src/ve/velib.h index 71ec1e5a2..a6114f8c3 100755 --- a/src/ve/velib.h +++ b/src/ve/velib.h @@ -319,7 +319,9 @@ public: const TString & caus_anticipo() const {return get("S10"); } const TString & tipi_iva_validi() const {return get("S11"); } // Ritorna il ripo documento in formato SDI (TD01, TD02 ..) - const TString & tipo_doc_sdi() const { return get("S12"); } + const TString & tipo_doc_sdi() const { return get("S3").mid(37,4); } + // Ritorna il regime fiscale + const TString & reg_fisc() const { return get("S3").mid(41, 4); } const char stato_finale_inserimento() const {return get("S2")[0]; } const char stato_finale_stampa() const {return get("S2")[1]; } const char stato_bloccato() const {return get("S2")[2]; } @@ -351,7 +353,7 @@ public: bool fattura_commerciale() const { return get_bool("B9"); } bool allega_documenti() const { return get_bool("B10"); } bool auto_add() const { return get_bool("B11"); } - bool invio_xml() const { return get_bool("B12"); } + bool invio_xml() const { return get_bool("B13"); } const TString& stringa_descrizione_documento() const { return _str_desc_doc; } const TString& stringa_descrizione_riga() const { return _str_desc_rdoc; } diff --git a/src/ve/vetbtip.h b/src/ve/vetbtip.h index 5d568aef5..b62fe7508 100755 --- a/src/ve/vetbtip.h +++ b/src/ve/vetbtip.h @@ -26,7 +26,8 @@ #define F_NATURA 124 #define F_NOTACREDDEB 125 #define F_LORDO 126 -#define F_FATCOM 127 +#define F_REG_FISC 127 +#define F_FATCOM 128 #define F_PMAIL 129 #define F_PSTAMPA2 130 #define F_NCOPIE2 131 diff --git a/src/ve/vetbtip.uml b/src/ve/vetbtip.uml index c8bb1affc..5e6e49c9b 100755 --- a/src/ve/vetbtip.uml +++ b/src/ve/vetbtip.uml @@ -85,7 +85,7 @@ END LIST F_TIPO_SDI 35 BEGIN PROMPT 2 5 "Tipo documento SDI " - FIELD S12 + FIELD S3[37,40] ITEM "|" ITEM "TD01|TD01 Fattura" MESSAGE ENABLE,F_NOTACREDDEB|"" ITEM "TD02|TD02 Acconto/Anticipo su fattura" MESSAGE ENABLE,F_NOTACREDDEB|"" @@ -98,7 +98,7 @@ END BOOLEAN F_ESPORTA_FP BEGIN PROMPT 65 5 "Invio XML" - FIELD B12 + FIELD B13 END GROUPBOX DLG_NULL 78 5 @@ -202,30 +202,55 @@ END BOOLEAN F_NOTACREDDEB BEGIN - PROMPT 2 13 "Nota di credito/debito" + PROMPT 2 13 "Nota di cred/deb" FIELD B7 END -BOOLEAN F_LORDO +LIST F_REG_FISC 40 BEGIN - PROMPT 40 13 "Calcolo importi al lordo" - FIELD B8 - MESSAGE TRUE CLEAR,F_FATCOM - MESSAGE FALSE ENABLE,F_FATCOM + PROMPT 23 13 "Regime Fisc. " + FIELD S3[41,44] + ITEM "|" + ITEM "RF01|RF01 Ordinario" + ITEM "RF02|RF02 Contribuenti minimi" + ITEM "RF04|RF04 Agricoltura, connesse e pesca" + ITEM "RF05|RF05 Vendita sali e tabacchi" + ITEM "RF06|RF06 Commercio fiammiferi" + ITEM "RF07|RF07 Editoria" + ITEM "RF08|RF08 Gestione servizi tel. pubblica" + ITEM "RF09|RF09 Rivendita DdT pubblico e di sosta" + ITEM "RF10|RF10 Intr., giochi e altre attività" + ITEM "RF11|RF11 Agenzie viaggi e turismo" + ITEM "RF12|RF12 Agriturismo" + ITEM "RF13|RF13 Vendite a domicilio" + ITEM "RF14|RF14 Rivendita usato, arte, ant. o col." + ITEM "RF15|RF15 Asta d’arte, ant. o da col." + ITEM "RF16|RF16 IVA per cassa P.A." + ITEM "RF17|RF17 IVA per cassa" + ITEM "RF18|RF18 Altro" + ITEM "RF19|RF19 Regime forfettario" END BOOLEAN F_SPESEAUT BEGIN - PROMPT 2 14 "Addebito automatico spese cliente" + PROMPT 2 14 "Addebito auto spese cliente" FIELD B0 END BOOLEAN F_FATCOM BEGIN - PROMPT 40 14 "Calcolo fattura commerciale" + PROMPT 30 14 "Calcolo fattura commerciale" FIELD B9 END +BOOLEAN F_LORDO +BEGIN + PROMPT 55 14 "Calcolo importi al lordo" + FIELD B8 + MESSAGE TRUE CLEAR,F_FATCOM + MESSAGE FALSE ENABLE,F_FATCOM +END + BOOLEAN F_MOVMAG BEGIN PROMPT 2 15 "Mov. magazzino" diff --git a/src/xvtdb/xvtdb.cpp b/src/xvtdb/xvtdb.cpp index d64b9fdc2..50a19adc1 100644 --- a/src/xvtdb/xvtdb.cpp +++ b/src/xvtdb/xvtdb.cpp @@ -11,7 +11,7 @@ * Classe per esecuzioni di query temporanee (wrapper semplice per SACommand) * ******************************************************************************/ -TXvt_recordset::TXvt_recordset() +TXvt_recordset::TXvt_recordset() : _freezed(false) { _con = new SAConnection; _recset = new SACommand; @@ -28,7 +28,7 @@ TXvt_recordset::TXvt_recordset() TXvt_recordset::TXvt_recordset(const char* db, const char* user, const char* pass, TT_driver tipoDb, const char * query, const bool ex, const bool freezed) - : _db(db), _usr(user), _psw(pass), _drv(tipoDb) + : _db(db), _usr(user), _psw(pass), _drv(tipoDb), _freezed(false) { _con = new SAConnection; if(connect(db, user, pass, tipoDb) == NOERR) @@ -62,14 +62,14 @@ TXvt_recordset::~TXvt_recordset() { try { + // Se non è connesso viene lanciata l'eccezione if(_CON(_con)->isConnected()) _CON(_con)->Disconnect(); - if(_con != NULL) - delete _con; - if(_recset != NULL) - delete _recset; } catch (...) {} + // Prima cancellare il recordset POI la connessione + delete _recset; + delete _con; } /* PRIVATE FUNCTIONS **************************************************************************************************/ @@ -301,22 +301,22 @@ bool TXvt_recordset::set(const char* query) bool TXvt_recordset::exec(bool autoF) { CHECK_FREEZED + bool ok = false; try { _RCS(_recset)->Execute(); _recno = -1; - if (autoF) - { - next(); - } + // Se trovo almeno un "select" faccio l'autofetch + SAString s = _RCS(_recset)->CommandText(); s.MakeUpper(); + ok = s.Find("SELECT") != SIZE_MAX && autoF ? next() : true; } catch (SAException &x) { _codeError = x.ErrNativeCode(); _stringError = x.ErrMessage(); - return false; + ok = false; } - return true; + return ok; } bool TXvt_recordset::setExec(const char* query, bool autoF)