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

📄 sqlapi.h

📁 能够连接各种数据库的API
💻 H
📖 第 1 页 / 共 3 页
字号:
	// Cursor
	SACommand	*m_pCursor;
private:
	// null indicator
	bool	m_bInternalNull;
	// scalar types
	union
	{
		bool m_Bool;
		short m_Short;
		long m_Long;
		double m_Double;
	} m_InternalScalar;
	SANumeric	m_InternalNumeric;
	SADateTime	m_InternalDateTime;
	// variable length types (string, bytes, Longs and Lobs)
	SAString	m_InternalString;
	// Cursor
	SACommand	m_InternalCursor;

public:
	SAValueRead(SADataType_t eDataType);
	SAValueRead(const SAValueRead &vr);
	virtual ~SAValueRead();

	SAValueRead &operator =(const SAValueRead &vr);

public:
	SADataType_t DataType() const;

	// Null type
	bool isNull() const;

	// scalar types
	bool asBool() const;
	short asShort() const;
	long asLong() const;
	double asDouble() const;

	// numeric
	SANumeric asNumeric() const;

	// date/time
	SADateTime asDateTime() const;

	// variable length types
	SAString asString() const;
	SAString asBytes() const;
	SAString asLongBinary() const;
	SAString asLongChar() const;
	SAString asBLob() const;
	SAString asCLob() const;

	// cursor
	SACommand *asCursor() const;

	void setLongOrLobReaderMode(SALongOrLobReaderModes_t eMode);
	SALongOrLobReaderModes_t LongOrLobReaderMode() const;

	// operators for quick accessing values
	// do not inline to prevent varnings
	operator bool() const;
	operator short() const;
	operator long() const;
	operator double() const;
	operator SANumeric() const;
	operator SADateTime() const;
	operator SAString() const;
	operator SACommand *() const;

	// data and indicator storage
	void setIndicatorStorage(bool *pStorage);
private:
	void setDataStorage(void *pStorage, SADataType_t eDataType);
};

class SQLAPI_API SAValue : public SAValueRead
{
	friend class ISACursor;
	friend class IibCursor;
	friend class IssDBLibCursor;
	friend class Iora7Cursor;
	friend class Iora8Cursor;
	friend class IsbCursor;
	friend class IodbcCursor;
	friend class Idb2Cursor;
	friend class IinfCursor;
	friend class IsybCursor;
	friend class ImyCursor;
	friend class IpgCursor;

private:
	bool	m_bInternalUseDefault;

protected:
	bool	*m_pbUseDefault;

	saLongOrLobWriter_t	m_fnWriter;
	int	m_nWriterSize;
	void			*m_pWriterAddlData;
	void			*m_pWriterBuf;
	unsigned int	m_nWriterAlloc;
	unsigned int	m_nWriterWritten;

	unsigned int InvokeWriter(
		SAPieceType_t &ePieceType,
		int nCallerMaxSize,
		void *&pBuf);

public:
	SAValue(SADataType_t eDataType);
	virtual ~SAValue();

	// Sets NULL value
	void setAsNull();
	// Sets a flag to use default value
	void setAsDefault();
	// queries if "default value" flag is set
	bool isDefault() const;

	void setAsUnknown();

	// scalar types
	bool &setAsBool();
	short &setAsShort();
	long &setAsLong();
	double &setAsDouble();

	// numeric
	SANumeric &setAsNumeric();

	// date/time
	SADateTime &setAsDateTime();

	// variable length types
	SAString &setAsString();
	SAString &setAsBytes();
	SAString &setAsLongBinary(
		saLongOrLobWriter_t fnWriter = NULL,
		unsigned int nWriterSize = 0, void *pAddlData = NULL);
	SAString &setAsLongChar(
		saLongOrLobWriter_t fnWriter = NULL,
		unsigned int nWriterSize = 0, void *pAddlData = NULL);
	SAString &setAsBLob(
		saLongOrLobWriter_t fnWriter = NULL,
		unsigned int nWriterSize = 0, void *pAddlData = NULL);
	SAString &setAsCLob(
		saLongOrLobWriter_t fnWriter = NULL,
		unsigned int nWriterSize = 0, void *pAddlData = NULL);

	// cursor
	SACommand *&setAsCursor();

	// special set function(s)
	SAValueRead &setAsValueRead();
};

class SQLAPI_API SAParam : public SAValue
{
	friend class SACommand;
	friend class saPlaceHolder;
	friend class saOptions;

	SACommand *m_pCommand;

	SAString			m_sName;
	SADataType_t		m_eParamType;
	int					m_nNativeType;
	int					m_nParamSize;
	int					m_nParamPrecision;
	int					m_nParamScale;
	SAParamDirType_t	m_eDirType;

	saOptions m_Options;

private:
	// disable copy constructor
	SAParam(const SAParam &);
	// disable assignment operator
	SAParam &operator = (const SAParam &);

protected:
	SAParam(
		SACommand *pCommand,
		const SAString &sName,
		SADataType_t eParamType,
		int nNativeType,
		int nParamSize,
		int	nParamPrecision,
		int	nParamScale,
		SAParamDirType_t eDirType);
	virtual ~SAParam();

public:
	const SAString &Name() const;
	SADataType_t ParamType() const;
	void setParamType(SADataType_t eParamType);
	int ParamNativeType() const;
	void setParamNativeType(int nNativeType);
	int ParamSize() const;
	void setParamSize(int nParamSize);
	SAParamDirType_t ParamDirType() const;
	void setParamDirType(SAParamDirType_t eParamDirType);
	int ParamPrecision() const;
	void setParamPrecision(int nParamPrecision);
	int ParamScale() const;
	void setParamScale(int nParamScale);

	void ReadLongOrLob(
		saLongOrLobReader_t fnReader,
		unsigned int nReaderWantedSize,
		void *pAddlData);

	SAString &setOption(const SAString &sOptionName);
	SAString Option(const SAString &sOptionName) const;
};

class SQLAPI_API saPlaceHolder
{
	friend class SACommand;

	SAString	m_sFullName;
	int			m_nStart;
	int			m_nEnd;

	SAParam		*m_pParamRef;

private:
	saPlaceHolder(
		const SAString &sFullName,
		int nStart,
		int nEnd,
		SAParam *pParamRef);
	virtual ~saPlaceHolder();

public:
	const SAString &getFullName() const;
	int getStart() const;
	int getEnd() const;
	SAParam *getParam() const;
};

class SQLAPI_API SABytes : public SAString
{
public:
	SABytes(const SAString &sData);
};

class SQLAPI_API SALongOrLob : public SAString
{
	friend class SACommand;

protected:
	saLongOrLobWriter_t	m_fnWriter;
	unsigned int		m_nWriterPieceSize;
	void				*m_pAddlData;

	SALongOrLob(const SAString &sData);
	SALongOrLob(
		saLongOrLobWriter_t fnWriter,
		unsigned int nWriterPieceSize,
		void *pAddlData);
};

class SQLAPI_API SALongBinary : public SALongOrLob
{
public:
	SALongBinary(const SAString &sData);
	SALongBinary(
		saLongOrLobWriter_t fnWriter,
		unsigned int nWriterPieceSize,
		void *pAddlData);
};

class SQLAPI_API SALongChar : public SALongOrLob
{
public:
	SALongChar(const SAString &sData);
	SALongChar(
		saLongOrLobWriter_t fnWriter,
		unsigned int nWriterPieceSize,
		void *pAddlData);
};

class SQLAPI_API SABLob : public SALongOrLob
{
public:
	SABLob(const SAString &sData);
	SABLob(
		saLongOrLobWriter_t fnWriter,
		unsigned int nWriterPieceSize,
		void *pAddlData);
};

class SQLAPI_API SACLob : public SALongOrLob
{
public:
	SACLob(const SAString &sData);
	SACLob(
		saLongOrLobWriter_t fnWriter,
		unsigned int nWriterPieceSize,
		void *pAddlData);
};

class SQLAPI_API SAField : public SAValueRead
{
	friend class SACommand;

	SACommand *m_pCommand;

	// as reported by describe API
	int					m_nPos;	// 1-based
	SAString			m_sName;
	SADataType_t		m_eFieldType;
	int					m_nNativeType;
	int					m_nFieldSize;
	int					m_nFieldPrecision;
	int					m_nFieldScale;
	bool				m_bFieldRequired;

	saOptions m_Options;

private:
	// disable copy constructor
	SAField(const SAField &);
	// disable assignment operator
	SAField &operator = (const SAField &);

protected:
	SAField(
		SACommand *pCommand,
		int nPos,	// 1-based
		const SAString &sName,
		SADataType_t eFieldType,
		int nNativeType,
		int nFieldSize,
		int nFieldPrecision,
		int nFieldScale,
		bool bFieldRequired);
	virtual ~SAField();

public:
	int Pos() const;
	const SAString &Name() const;
	SADataType_t FieldType() const;
	int FieldNativeType() const;
	int FieldSize() const;
	int FieldPrecision() const;
	int FieldScale() const;
	bool isFieldRequired() const;

	void ReadLongOrLob(
		saLongOrLobReader_t fnReader,
		unsigned int nReaderWantedSize,
		void *pAddlData);

	SAString &setOption(const SAString &sOptionName);
	SAString Option(const SAString &sOptionName) const;
};

class SQLAPI_API SAException
{
	friend class SAConnection;
	friend class SACommand;
	friend class SAStoredProc;
	friend class Iora7Connection;
	friend class Iora8Connection;
	friend class IibConnection;
	friend class IodbcConnection;
	friend class IsbConnection;
	friend class Iss6Connection;

public:
	SAException(
		SAErrorClass_t eError,
		int nNativeError,
		int nErrPos,
		const SAString &sMsg);
	SAException(
		SAErrorClass_t eError,
		int nNativeError,
		int nErrPos,
		const SAChar *lpszFormat, ...);

	SAException(const SAException &other);

public:
	virtual ~SAException();

	static void throwUserException(
		int nUserCode, const SAChar *lpszFormat, ...);

	SAErrorClass_t ErrClass() const;
	int ErrNativeCode() const;
	int ErrPos() const;
	SAString ErrText() const;

protected:
	SAErrorClass_t	m_eErrorClass;
	int				m_nNativeError;
	int				m_nErrPos;
	SAString		m_sMsg;

	int	nReserved;
};

class SQLAPI_API SAUserException : public SAException
{
	friend class SAException;

protected:
	SAUserException(int nUserCode, const SAString &sMsg);

public:
	virtual ~SAUserException();
};

#define SQLAPI_VER_MAJOR	3
#define SQLAPI_VER_MINOR	7
#define SQLAPI_VER_BUILD	11

// we use class to avoid namespace using
class SQLAPI_API SAGlobals
{
public:
	static char *setlocale(int category, const char *locale);

	static int GetVersionMajor();
	static int GetVersionMinor();
	static int GetVersionBuild();
};

#endif // !defined(AFX_SQLAPI_H__BC064F47_40FC_45B6_AA67_2E6D2568E219__INCLUDED_)

⌨️ 快捷键说明

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