⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqlapi.h

📁 通用的数据库中间库
💻 H
📖 第 1 页 / 共 3 页
字号:
#if !defined(AFX_SQLAPI_H__BC064F47_40FC_45B6_AA67_2E6D2568E219__INCLUDED_)
#define AFX_SQLAPI_H__BC064F47_40FC_45B6_AA67_2E6D2568E219__INCLUDED_

#define sa_min(x, y) (x < y? x : y)
#define sa_max(x, y) (x > y? x : y)

#include "osdep.h"

#ifdef LINUX
	#define SQLAPI_STATIC
#endif

#ifdef SQLAPI_STATIC
	#define SQLAPI_API
#else
	#ifdef SQLAPI_EXPORTS
		#define SQLAPI_API __declspec(dllexport)
	#else
		#define SQLAPI_API __declspec(dllimport)
	#endif
#endif

#include <time.h>
#include <stdarg.h>

class ISAClient;
class ISAConnection;
class ISACursor;

class SACommand;
struct sa_Commands;
class saOptions;
class SAParam;

class saPlaceHolder;

class SABytes;
class SALongBinary;
class SALongChar;
class SABLob;
class SACLob;

typedef
enum
{
	SA_Client_NotSpecified,
	SA_ODBC_Client,
	SA_Oracle_Client,
	SA_SQLServer_Client,
	SA_InterBase_Client,
	SA_SQLBase_Client,
	SA_DB2_Client,
	SA_Informix_Client,
	SA_Sybase_Client,
	SA_MySQL_Client,
	SA_PostgreSQL_Client,
	_SA_Client_Reserverd = (int)(((unsigned int)(-1))/2)
} SAClient_t;

typedef
enum
{
	SA_No_Error,
	SA_UserGenerated_Error,
	SA_Library_Error,
	SA_RDBMS_API_Error,
	_SA_ErrorClass_Reserved = (int)(((unsigned int)(-1))/2)
} SAErrorClass_t;

typedef
enum
{
	SA_LevelUnknown = -1,	//  the default
	SA_ANSILevel0,
	SA_ANSILevel1,
	SA_ANSILevel2,
	SA_ANSILevel3,
	SA_ReadUncommitted = SA_ANSILevel0,
	SA_ReadCommitted = SA_ANSILevel1,
	SA_RepeatableRead = SA_ANSILevel2,
	SA_Serializable = SA_ANSILevel3,
	_SA_IsolationLevel_Reserved = (int)(((unsigned int)(-1))/2)
} SAIsolationLevel_t;

typedef
enum
{
	SA_AutoCommitUnknown = -1,
	SA_AutoCommitOff,
	SA_AutoCommitOn,
	_SA_AutoCommit_Reserved = (int)(((unsigned int)(-1))/2)
} SAAutoCommit_t;

typedef
enum
{
	SA_dtUnknown,
	SA_dtBool,
	SA_dtShort,
	SA_dtLong,
	SA_dtDouble,
	SA_dtDateTime,
	SA_dtString,
	SA_dtBytes,
	SA_dtLongBinary,
	SA_dtLongChar,
	SA_dtBLob,
	SA_dtCLob,
	SA_dtCursor,
	SA_dtSpecificToDBMS,
	_SA_DataType_Reserved = (int)(((unsigned int)(-1))/2)
} SADataType_t;

typedef
enum
{
	SA_CmdUnknown,
	SA_CmdSQLStmt,
	SA_CmdStoredProc,
	_SA_Cmd_Reserved = (int)(((unsigned int)(-1))/2)
}
SACommandType_t;

typedef
enum
{
	SA_ParamInput,
	SA_ParamInputOutput,
	SA_ParamOutput,
	SA_ParamReturn,
	_SA_ParamDirType_Reserved = (int)(((unsigned int)(-1))/2)
} SAParamDirType_t;

typedef
enum
{
	SA_LongOrLobReaderDefault,
	SA_LongOrLobReaderManual,
	_SA_LongOrLobReaderModes_Reserved = (int)(((unsigned int)(-1))/2)
} SALongOrLobReaderModes_t;

typedef
enum {
	SA_FirstPiece = 1,
	SA_NextPiece = 2,
	SA_LastPiece = 3,
    SA_OnePiece = 4,
	_SA_Reserved_PieceType = (int)(((unsigned int)(-1))/2)
} SAPieceType_t;

// Long or Lob writer callback, use for parameter binding
typedef unsigned int (*saLongOrLobWriter_t)
	(SAPieceType_t &ePieceType, void *pBuf, unsigned int nLen, void *pAddlData);
// default Long or Lob writer callback, use to bind from parameters internal buffer
extern saLongOrLobWriter_t SQLAPI_API saDefaultLongOrLobWriter;

// Long or Lob reader callback, use for field fetching
typedef void (*saLongOrLobReader_t)
	(SAPieceType_t ePieceType, void *pBuf, unsigned int nLen, unsigned int nBlobSize, void *pAddlData);
// default Blob reader callback, use to fetch into field internal buffer
extern saLongOrLobReader_t SQLAPI_API saDefaultLongOrLobReader;

class SQLAPI_API saAPI
{
};

class SQLAPI_API saConnectionHandles
{
};

class SQLAPI_API saCommandHandles
{
};

#if defined(SA_UNICODE)
typedef wchar_t SAChar;
#define _SA(x)      L ## x
#define sa_strlen(x) wcslen(x)
#define sa_strstr(x, y) wcsstr(x, y)
#define sa_strchr(x, y) wcschr(x, y)
#define sa_isspace(x) iswspace(x)
#define sa_isdigit(x) iswdigit(x)
#define sa_isalpha(x) iswalpha(x)
#define sa_strcmp(x, y) wcscmp(x, y)
#define sa_strncmp(x, y, z) wcsncmp(x, y, z)
#define sa_tolower(x) towlower(x)
#define sa_strcoll(x, y) wcscoll(x, y)
#define sa_strpbrk(x, y) wcspbrk(x, y)
#define sa_strrchr(x, y) wcsrchr(x, y)
#define sa_strtol(x, y, z) wcstol(x, y, z)
#define sa_strtoul(x, y, z) wcstoul(x, y, z)
#define sa_strtod(x, y) wcstod(x, y)
#define sa_toi(x) (int)wcstol(x, NULL, 10)
#define sa_tol(x) wcstol(x, NULL, 10)
#define sa_vsprintf(x, y, z) vswprintf(x, y, z)
#define sa_sprintf swprintf
#define sa_csinc(x) (++(x))
#define sa_clen(x) (1)
#else
typedef char SAChar;
#define _SA(x)      x
#define sa_strlen(x) strlen(x)
#define sa_strstr(x, y) strstr(x, y)
#define sa_strchr(x, y) strchr(x, y)
#define sa_isspace(x) isspace((unsigned char)x)
#define sa_isdigit(x) isdigit((unsigned char)x)
#define sa_isalpha(x) isalpha((unsigned char)x)
#define sa_strcmp(x, y) strcmp(x, y)
#define sa_strncmp(x, y, z) strncmp(x, y, z)
#define sa_tolower(x) tolower((unsigned char)x)
#define sa_strcoll(x, y) strcoll(x, y)
#define sa_strpbrk(x, y) strpbrk(x, y)
#define sa_strrchr(x, y) strrchr(x, y)
#define sa_strtol(x, y, z) strtol(x, y, z)
#define sa_strtoul(x, y, z) strtoul(x, y, z)
#define sa_strtod(x, y) strtod(x, y)
#define sa_toi(x) atoi(x)
#define sa_tol(x) atol(x)
#define sa_vsprintf(x, y, z) vsprintf(x, y, z)
#define sa_sprintf sprintf
#define sa_csinc(x) (++(x))
#define sa_clen(x) (1)
#endif

struct SAStringConvertedData
{
	int nDataLength;        // length of converted data (including terminator)
	// !SAChar ConvertedData[nDataLength+1]

#ifdef SA_UNICODE
	char *data()		// char * to converted data
		{ return (char *)(this+1); }
#else	// !SA_UNICODE
	wchar_t *data()	// wchar_t * to converted data
		{ return (wchar_t *)(this+1); }
#endif	//!SA_UNICODE
};

struct SAStringData
{
	SAStringConvertedData	*pConvertedData;	// pointer to converted data, if any

#ifdef SA_UNICODE
	// nDataLength*sizeof(SAChar) - real length of binary data
	// also true: nLengthInBytes % sizeof(SAChar)
	// In bytes [0..sizeof(SAChar)-1]
	int nBinaryDataLengthDiff;
#endif	// SA_UNICODE

	long nRefs;				// reference count
	int nDataLength;		// length of data (including terminator)
	int nAllocLength;		// length of allocation
	// SAChar data[nAllocLength]

	SAChar *data()           // SAChar * to managed data
		{ return (SAChar *)(this+1); }
};

class SQLAPI_API SAString
{
public:
// Constructors
	// constructs empty SAString
	SAString();
	// copy constructor
	SAString(const SAString &stringSrc);
	// from a single character
	SAString(SAChar ch, int nRepeat = 1);
	// from an ANSI (multibyte) string (converts to SAChar)
	SAString(const char *lpsz);
	// from a UNICODE string (converts to SAChar)
	SAString(const wchar_t *lpsz);
	// subset of characters from an ANSI (multibyte) string (converts to SAChar)
	SAString(const char *lpch, int nLength);
	// subset of characters from a UNICODE string (converts to SAChar)
	SAString(const wchar_t *lpch, int nLength);
	// from unsigned characters (converts to SAChar)
	SAString(const unsigned char *psz);
	// special constructor for binary data (no converion to SAChar)
	SAString(const void *pBuffer, int nLengthInBytes);

// Attributes & Operations

	// get data length (in characters)
	int GetLength() const;
	// true if zero length
	bool IsEmpty() const;
	// clear contents to empty
	void Empty();

	// return pointer to const string
	operator const SAChar *() const;

	// overloaded assignment

	// ref-counted copy from another SAString
	const SAString &operator =(const SAString &sSrc);
	// set string content to single character
	const SAString &operator=(SAChar ch);
#ifdef SA_UNICODE
	const SAString &operator=(char ch);
#endif
	// copy string content from ANSI (multibyte) string (converts to SAChar)
	const SAString &operator=(const char *lpsz);
	// copy string content from UNICODE string (converts to SAChar)
	const SAString &operator=(const wchar_t *lpsz);
	// copy string content from unsigned chars
	const SAString &operator=(const unsigned char *psz);

	// string concatenation

	// concatenate from another SAString
	const SAString &operator+=(const SAString &string);
	// concatenate a single character
	const SAString &operator+=(SAChar ch);
#ifdef SA_UNICODE
	// concatenate an ANSI character after converting it to SAChar
	const SAString &operator+=(char ch);
#endif
	// concatenate from a SAChar string
	const SAString &operator+=(const SAChar *lpsz);

	friend SAString SQLAPI_API operator+(const SAString &string1, const SAString &string2);
	friend SAString SQLAPI_API operator+(const SAString &string, SAChar ch);
	friend SAString SQLAPI_API operator+(SAChar ch, const SAString &string);
#ifdef SA_UNICODE
	friend SAString SQLAPI_API operator+(const SAString &string, char ch);
	friend SAString SQLAPI_API operator+(char ch, const SAString &string);
#endif
	friend SAString SQLAPI_API operator+(const SAString &string, const SAChar *lpsz);
	friend SAString SQLAPI_API operator+(const SAChar *lpsz, const SAString &string);

	// string comparison

	// straight character comparison
	int Compare(const SAChar *lpsz) const;
	// compare ignoring case
	int CompareNoCase(const SAChar *lpsz) const;
	// NLS aware comparison, case sensitive
	int Collate(const SAChar *lpsz) const;

	// simple sub-string extraction

	// return all characters starting at zero-based nFirst
	SAString Mid(int nFirst) const;
	// return nCount characters starting at zero-based nFirst
	SAString Mid(int nFirst, int nCount) const;
	// return first nCount characters in string
	SAString Left(int nCount) const;
	// return nCount characters from end of string
	SAString Right(int nCount) const;

	// trimming whitespace (either side)

	// remove whitespace starting from right edge
	void TrimRight();
	// remove whitespace starting from left side
	void TrimLeft();

	// trimming anything (either side)

	// remove continuous occurrences of chTarget starting from right
	void TrimRight(SAChar chTarget);
	// remove continuous occcurrences 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
	// passed string, starting from left
	void TrimLeft(const SAChar *lpszTargets);

	// advanced manipulation

	// replace occurrences of substring lpszOld with lpszNew;
	// empty lpszNew removes instances of lpszOld
	int Replace(const SAChar *lpszOld, const SAChar *lpszNew);
	// insert character at zero-based index; concatenates
	// if index is past end of string
	int Insert(int nIndex, SAChar ch);
	// insert substring at zero-based index; concatenates
	// if index is past end of string
	int Insert(int nIndex, const SAChar *pstr);
	// delete nCount characters starting at zero-based index
	int Delete(int nIndex, int nCount = 1);

	// searching

	// find character starting at left, -1 if not found
	int Find(SAChar ch) const;
	// find character starting at right
	int ReverseFind(SAChar ch) const;
	// find character starting at zero-based index and going right
	int Find(SAChar ch, int nStart) const;
	// find first instance of any character in passed string
	int FindOneOf(const SAChar *lpszCharSet) const;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -