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

📄 sdcommon.hpp

📁 SQLDirect Component Library is a light-weight Borland Database Engine replacement for Borland Delphi
💻 HPP
📖 第 1 页 / 共 2 页
字号:

class DELPHICLASS TSDFieldDescList;
class PASCALIMPLEMENTATION TSDFieldDescList : public Classes::TList 
{
	typedef Classes::TList inherited;
	
public:
	TSDFieldDesc* operator[](int Index) { return FieldDescs[Index]; }
	
private:
	TSDFieldDesc* __fastcall GetFieldDescs(int Index);
	
public:
	__fastcall virtual ~TSDFieldDescList(void);
	virtual void __fastcall Clear(void);
	TSDFieldDesc* __fastcall AddFieldDesc(void);
	void __fastcall ArrangeFieldNames(void);
	TSDFieldDesc* __fastcall FieldDescByName(const AnsiString AFieldName);
	TSDFieldDesc* __fastcall FieldDescByNumber(int AFieldNo);
	__property TSDFieldDesc* FieldDescs[int Index] = {read=GetFieldDescs/*, default*/};
public:
	#pragma option push -w-inl
	/* TObject.Create */ inline __fastcall TSDFieldDescList(void) : Classes::TList() { }
	#pragma option pop
	
};


#pragma pack(push, 1)
struct TSDFieldInfo
{
	int FetchStatus;
	int DataSize;
} ;
#pragma pack(pop)

typedef TSDFieldInfo *PSDFieldInfo;

typedef DynamicArray<int >  TIntArray;

typedef TParam TSDHelperParam;
;

typedef TParams TSDHelperParams;
;

typedef Db::TParamType TSDHelperParamType;

#pragma option push -b
enum TSDCommandType { ctQuery, ctTable, ctStoredProc };
#pragma option pop

typedef void __fastcall (__closure *TSDReleaseHandleEvent)(bool SaveRes);

class PASCALIMPLEMENTATION TISqlCommand : public System::TObject 
{
	typedef System::TObject inherited;
	
private:
	TSDCommandType FCommandType;
	AnsiString FCommandText;
	AnsiString FNativeCommand;
	int FBlobFieldCount;
	TSDFieldDescList* FFieldDescs;
	Db::TParams* FParamsRef;
	char *FParamsBuffer;
	char *FFieldsBuffer;
	int FBlobCacheOffs;
	DynamicArray<int >  FFieldBufOffs;
	int FMaxCharParamSize;
	TSDBufferList* FBufList;
	TISqlDatabase* FSqlDatabase;
	TSDReleaseHandleEvent FReleaseHandle;
	int __fastcall GetFieldBufOffs(int Index);
	bool __fastcall GetPrepared(void);
	TISqlDatabase* __fastcall GetSqlDatabase(void);
	void __fastcall SetParamsRef(Db::TParams* Value);
	
protected:
	void __fastcall AddParam(AnsiString AParamName, Db::TFieldType ADataType, Db::TParamType AParamType);
	void * __fastcall GetFieldBuffer(int AFieldNo, void * SelBuf);
	virtual void __fastcall DoReleaseHandle(bool SaveRes);
	virtual void __fastcall AllocParamsBuffer(void);
	virtual void __fastcall AllocFieldsBuffer(void);
	virtual void __fastcall BindParamsBuffer(void);
	virtual void __fastcall FreeParamsBuffer(void);
	virtual void __fastcall FreeFieldsBuffer(void);
	virtual void __fastcall SetFieldsBuffer(void);
	virtual void __fastcall DoPrepare(AnsiString ACommandValue) = 0 ;
	virtual void __fastcall DoExecDirect(AnsiString ACommandValue) = 0 ;
	virtual void __fastcall DoExecute(void) = 0 ;
	virtual int __fastcall CnvtDateTime2DBDateTime(Db::TFieldType ADataType, System::TDateTime Value, char * Buffer, int BufSize);
	virtual void __fastcall InitParamList(void);
	void __fastcall ClearFieldDescs(void);
	virtual void __fastcall FetchBlobFields(void);
	virtual Db::TFieldType __fastcall FieldDataType(int ExtDataType);
	TSDFieldDesc* __fastcall FieldDescByName(const AnsiString AFieldName);
	virtual void __fastcall GetFieldDescs(TSDFieldDescList* Descs);
	virtual char * __fastcall GetFieldsBuffer(void);
	virtual int __fastcall GetFieldsBufferSize(void);
	virtual void * __fastcall GetHandle(void);
	virtual int __fastcall GetParamsBufferSize(void);
	virtual Word __fastcall NativeDataSize(Db::TFieldType FieldType);
	virtual int __fastcall NativeDataType(Db::TFieldType FieldType);
	int __fastcall NativeParamSize(Db::TParam* Param);
	void __fastcall ParseFieldNames(const AnsiString theSelect, Classes::TStrings* FldInfo);
	virtual bool __fastcall RequiredCnvtFieldType(Db::TFieldType FieldType);
	void __fastcall SetCommandText(AnsiString Value);
	void __fastcall SetNativeCommand(AnsiString Value);
	__property TSDBufferList* BufList = {read=FBufList};
	__property AnsiString NativeCommand = {read=FNativeCommand};
	__property char * ParamsBuffer = {read=FParamsBuffer};
	__property char * FieldsBuffer = {read=GetFieldsBuffer};
	__property int FieldBufOffs[int Index] = {read=GetFieldBufOffs};
	
public:
	__fastcall virtual TISqlCommand(TISqlDatabase* ASqlDatabase);
	__fastcall virtual ~TISqlCommand(void);
	void __fastcall SaveResults(void);
	virtual void __fastcall CloseResultSet(void);
	virtual void __fastcall Disconnect(bool Force);
	virtual void __fastcall InitNewCommand(void);
	virtual void __fastcall ExecDirect(AnsiString ACommandValue);
	virtual void __fastcall Execute(void);
	virtual int __fastcall GetAutoIncValue(void);
	virtual int __fastcall GetRowsAffected(void);
	virtual bool __fastcall NextResultSet(void);
	virtual void __fastcall Prepare(AnsiString ACommandValue);
	virtual bool __fastcall ResultSetExists(void);
	virtual bool __fastcall FetchNextRow(void);
	virtual void __fastcall InitFieldDescs(void);
	virtual bool __fastcall GetCnvtFieldData(TSDFieldDesc* AFieldDesc, void * Buffer, int BufSize);
	TBytes __fastcall GetBlobValue(TSDFieldDesc* AFieldDesc);
	virtual void __fastcall GetOutputParams(void);
	void __fastcall PutBlobValue(TSDFieldDesc* AFieldDesc, TBytes sBlobValue);
	virtual int __fastcall ReadBlob(TSDFieldDesc* AFieldDesc, TBytes &BlobData);
	virtual int __fastcall WriteBlob(int FieldNo, const char * Buffer, int Count);
	virtual int __fastcall WriteBlobByName(AnsiString Name, const char * Buffer, int Count);
	bool __fastcall GetFieldAsInt64(Word AFieldNo, __int64 &Value);
	bool __fastcall GetFieldAsInt16(Word AFieldNo, short &Value);
	bool __fastcall GetFieldAsInt32(Word AFieldNo, int &Value);
	bool __fastcall GetFieldAsFloat(Word AFieldNo, double &Value);
	bool __fastcall GetFieldAsString(Word AFieldNo, AnsiString &Value);
	__property int BlobCacheOffs = {read=FBlobCacheOffs, nodefault};
	__property int BlobFieldCount = {read=FBlobFieldCount, nodefault};
	__property TSDCommandType CommandType = {read=FCommandType, write=FCommandType, nodefault};
	__property AnsiString CommandText = {read=FCommandText};
	__property TSDFieldDescList* FieldDescs = {read=FFieldDescs};
	__property void * Handle = {read=GetHandle};
	__property int MaxCharParamSize = {read=FMaxCharParamSize, nodefault};
	__property Db::TParams* Params = {read=FParamsRef, write=SetParamsRef};
	__property bool Prepared = {read=GetPrepared, nodefault};
	__property TISqlDatabase* SqlDatabase = {read=GetSqlDatabase};
	__property TSDReleaseHandleEvent OnReleaseHandle = {read=FReleaseHandle, write=FReleaseHandle};
};


class DELPHICLASS TSDExprParser;
class PASCALIMPLEMENTATION TSDExprParser : public Dbcommon::TExprParser 
{
	typedef Dbcommon::TExprParser inherited;
	
private:
	Db::TDataSet* FDataSet;
	Classes::TStringList* FFilteredFields;
	Word __fastcall GetLiteralStart(int StartPtr);
	Dbcommon::TCANOperator __fastcall GetNodeOperator(int NodePtr);
	Variant __fastcall GetNodeValue(int StartPos, int NodePos);
	Variant __fastcall GetUnaryNodeValue(int StartPtr, int NodePtr);
	Variant __fastcall GetBinaryNodeValue(int StartPtr, int NodePtr);
	Variant __fastcall GetCompareNodeValue(int StartPtr, int NodePtr);
	Variant __fastcall GetConstNodeValue(int StartPtr, int NodePtr);
	Variant __fastcall GetFieldNodeValue(int StartPtr, int NodePtr);
	Variant __fastcall GetFuncNodeValue(int StartPtr, int NodePtr);
	Variant __fastcall GetListNodeValue(int StartPtr, int NodePtr);
	Variant __fastcall GetOpInValue(const Variant &V1, const Variant &V2);
	Variant __fastcall GetOpLikeValue(const Variant &V1, const Variant &V2);
	Db::TField* __fastcall FieldByName(const AnsiString FieldName);
	
public:
	__fastcall TSDExprParser(Db::TDataSet* DataSet, const AnsiString Text, Db::TFilterOptions Options, Dbcommon::TParserOptions ParserOptions, const AnsiString FieldName, Classes::TBits* DepFields, const Byte * FieldMap);
	__fastcall virtual ~TSDExprParser(void);
	bool __fastcall CalcBooleanValue(void);
	Variant __fastcall CalcVariantValue();
	void __fastcall ClearFields(void);
};


//-- var, const, procedure ---------------------------------------------------
static const Shortint MAXFIELDNAMELEN = 0x32;
static const Byte DEFMAXCHARPARAMLEN = 0xff;
static const Byte DEFMAXFIELDSTRINGSIZE = 0xff;
static const Word DEF_BLOB_PIECE_SIZE = 0x7ff0;
static const Shortint MAX_BCDFIELD_PREC = 0x14;
static const Shortint MAX_BCDFIELD_SCALE = 0x4;
static const Shortint MAX_INTFIELD_PREC = 0xa;
static const Shortint MAX_SINTFIELD_PREC = 0x5;
static const Shortint indTRUNC = 0xfffffffe;
static const Shortint indNULL = 0xffffffff;
static const Shortint indVALUE = 0x0;
static const Shortint fldstUNKNOWN = 0x0;
static const Shortint fldstMEMO = 0x10;
static const Shortint fldstBINARY = 0x11;
static const Shortint fldstHMEMO = 0x12;
static const Shortint fldstHBINARY = 0x13;
static const Shortint fldstHCFILE = 0x14;
static const Shortint fldstHBFILE = 0x15;
#define ServerDelimiters ":@"
static const Shortint SizeOfGuidString = 0x26;
static const Shortint SizeOfGuidBinary = 0x10;
extern PACKAGE AnsiString ServerTypeNames[11];
#define CLRHelperDLL "SQLDIRHN.DLL"
extern PACKAGE bool __fastcall IsOldPrefixExists(const AnsiString AParamName, const AnsiString OldPrefix);
extern PACKAGE bool __fastcall IsSelectQuery(const AnsiString SQL);
extern PACKAGE AnsiString __fastcall IsLiveQuery(const AnsiString SQL);
extern PACKAGE void __fastcall MoveString(AnsiString SrcStr, int SrcPos, AnsiString &DestStr, int DestPos, int Count);
extern PACKAGE void __fastcall CreateParamsFromSQL(Db::TParams* List, const AnsiString SQL, char ParamPrefix);
extern PACKAGE AnsiString __fastcall ExtractColumnName(const AnsiString AFieldInfo);
extern PACKAGE AnsiString __fastcall GenerateSQL(Db::TUpdateStatus UpdateStatus, Db::TUpdateMode UpdateMode, const AnsiString TableName, Classes::TStrings* FieldInfo, Db::TFields* Fields, bool QuoteIdent);
extern PACKAGE AnsiString __fastcall RepeatChar(char Ch, AnsiString S);
extern PACKAGE AnsiString __fastcall QuoteIdentifier(AnsiString AName, bool UseQuote);
extern PACKAGE AnsiString __fastcall CreateProcedureCallCommand(AnsiString AProcName, Db::TParams* AParams, bool IsMSSQL);
extern PACKAGE AnsiString __fastcall ReplaceParamMarkers(AnsiString OldStmt, Db::TParams* AParams);
extern PACKAGE void __fastcall StrRTrim(char * S);
extern PACKAGE bool __fastcall IsNameDelimiter(char C);
extern PACKAGE bool __fastcall IsLiteral(char C);
extern PACKAGE AnsiString __fastcall StripLiterals(const AnsiString Str);
extern PACKAGE int __fastcall LocateText(const AnsiString Substr, const AnsiString S);
extern PACKAGE int __fastcall StrFindFromPos(const AnsiString Substr, const AnsiString S, int StartPos);
extern PACKAGE bool __fastcall ReplaceString(bool Once, AnsiString OldStr, AnsiString NewStr, AnsiString &ResultStr);
extern PACKAGE bool __fastcall IsBlobType(Db::TFieldType FieldType);
extern PACKAGE bool __fastcall IsSupportedBlobTypes(Db::TFieldType FieldType);
extern PACKAGE bool __fastcall IsRequiredSizeTypes(Db::TFieldType FieldType);
extern PACKAGE bool __fastcall IsDateTimeType(Db::TFieldType FieldType);
extern PACKAGE bool __fastcall IsNumericType(Db::TFieldType FieldType);
extern PACKAGE AnsiString __fastcall GetAppName();
extern PACKAGE AnsiString __fastcall GetModuleFileNameStr(unsigned hModule);
extern PACKAGE AnsiString __fastcall GetHostName();
extern PACKAGE AnsiString __fastcall GetSQLDirectVersion();
extern PACKAGE AnsiString __fastcall GetSqlLibParamName(int ServerTypeCode);
extern PACKAGE AnsiString __fastcall ExtractLibName(const AnsiString LibNames, char Sep, int &Pos);
extern PACKAGE AnsiString __fastcall ExtractStoredProcName(const AnsiString sFullProcName);
extern PACKAGE AnsiString __fastcall ExtractServerName(const AnsiString sRemoteDatabase);
extern PACKAGE AnsiString __fastcall ExtractDatabaseName(const AnsiString sRemoteDatabase);
extern PACKAGE bool __fastcall ContainsLikeWildcards(const AnsiString s);
extern PACKAGE bool __fastcall ExtractOwnerObjNames(const AnsiString AFullObjName, AnsiString &AOwnerName, AnsiString &AObjName);
extern PACKAGE int __fastcall GetFileVersion(const AnsiString FileName);
extern PACKAGE void __fastcall ReadFileVersInfo(const AnsiString FileName, AnsiString &ProductName, AnsiString &VersStr);
extern PACKAGE int __fastcall HelperCompareStr(const AnsiString S1, const AnsiString S2);
extern PACKAGE int __fastcall HelperCompareText(const AnsiString S1, const AnsiString S2);
extern PACKAGE bool __fastcall VarIsStrType(const Variant &AValue);
extern PACKAGE int __fastcall CompareVar(const Variant &V1, const Variant &V2, bool CaseInsensitive);
extern PACKAGE bool __fastcall VarIsEqual(const Variant &AVar1, const Variant &AVar2, bool CaseInsensitive, bool PartialKey, bool AtStartOnly);
extern PACKAGE int __fastcall MaxIntValue(int A, int B);
extern PACKAGE int __fastcall MinIntValue(int A, int B);
extern PACKAGE Word __fastcall GetMajorVer(int Ver);
extern PACKAGE Word __fastcall GetMinorVer(int Ver);
extern PACKAGE int __fastcall MakeVerValue(Word MajorVer, Word MinorVer);
extern PACKAGE int __fastcall VersionStringToDWORD(const AnsiString VerStr);
extern PACKAGE System::TDateTime __fastcall SqlDateToDateTime(AnsiString Value);
extern PACKAGE System::TDateTime __fastcall SqlTimeToDateTime(AnsiString Value);
extern PACKAGE double __fastcall SqlStrToFloatDef(AnsiString Value, double Default);
extern PACKAGE bool __fastcall SqlStrToBoolean(AnsiString Value);
extern PACKAGE AnsiString __fastcall CnvtVarBytesToHexString(const Variant &Value);
extern PACKAGE void __fastcall GuidToCharBuffer(char * SrcBuf, int SrcBufLen, char * DstBuf, int DstBufLen);
extern PACKAGE void __fastcall ParseTableFieldsFromSQL(const AnsiString theSelect, const Classes::TStrings* FieldList, Classes::TStrings* FldInfo, Classes::TStrings* TblInfo);
extern PACKAGE TSDFieldInfo __fastcall GetFieldInfoStruct(void * Buffer, int Offset);
extern PACKAGE void __fastcall SetFieldInfoStruct(void * Buffer, int Offset, const TSDFieldInfo &Value);
extern PACKAGE int __fastcall GetFieldInfoDataSizeOff(void);
extern PACKAGE int __fastcall GetFieldInfoFetchStatusOff(void);
extern PACKAGE TBytes __fastcall GetFieldBlobData(char * RecBuf, int ABlobCacheOffs, int AFieldOffset);
extern PACKAGE int __fastcall GetFieldBlobDataSize(char * RecBuf, int ABlobCacheOffs, int AFieldOffset);
extern PACKAGE void __fastcall SetFieldBlobData(char * RecBuf, int ABlobCacheOffs, int AFieldOffset, TBytes Value);
extern PACKAGE Byte __fastcall HelperMemReadByte(const void * Ptr, int Offset);
extern PACKAGE void __fastcall HelperMemWriteByte(const void * Ptr, int Offset, Byte Value);
extern PACKAGE short __fastcall HelperMemReadInt16(const void * Ptr, int Offset);
extern PACKAGE void __fastcall HelperMemWriteInt16(const void * Ptr, int Offset, short Value);
extern PACKAGE int __fastcall HelperMemReadInt32(const void * Ptr, int Offset);
extern PACKAGE void __fastcall HelperMemWriteInt32(const void * Ptr, int Offset, int Value);
extern PACKAGE __int64 __fastcall HelperMemReadInt64(const void * Ptr, int Offset);
extern PACKAGE void __fastcall HelperMemWriteInt64(const void * Ptr, int Offset, __int64 Value);
extern PACKAGE double __fastcall HelperMemReadDouble(const void * Ptr, int Offset);
extern PACKAGE void __fastcall HelperMemWriteDouble(const void * Ptr, int Offset, double Value);
extern PACKAGE float __fastcall HelperMemReadSingle(const void * Ptr, int Offset);
extern PACKAGE void * __fastcall HelperMemReadPtr(const void * Ptr, int Offset);
extern PACKAGE void __fastcall HelperMemWritePtr(const void * Ptr, int Offset, void * Value);
extern PACKAGE bool __fastcall HelperCurrToBCD(System::Currency Curr, void * BCDPtr, int Precision = 0x20, int Decimals = 0x4);
extern PACKAGE Db::TDateTimeRec __fastcall HelperMemReadDateTimeRec(const void * Ptr, int Offset);
extern PACKAGE void __fastcall HelperMemWriteDateTimeRec(const void * Ptr, int Offset, const Db::TDateTimeRec &Value);
extern PACKAGE void __fastcall HelperMemWriteGuid(const void * Ptr, int Offset, const GUID &Value);
extern PACKAGE void __fastcall HelperMemWriteString(const void * Ptr, int Offset, AnsiString Value, int Count);
extern PACKAGE AnsiString __fastcall HelperPtrToString(const void * Ptr, int Len = 0xffffffff);
extern PACKAGE void __fastcall HelperAssignParamValue(Db::TParam* AParam, const Db::TDateTimeRec &Value);
extern PACKAGE void * __fastcall IncPtr(const void * ptr, int Delta);
extern PACKAGE void * __fastcall SafeReallocMem(const void * OldPtr, int Size);
extern PACKAGE void __fastcall SafeCopyMem(void * Src, void * Dest, int Count);
extern PACKAGE void __fastcall SafeInitMem(void * Buffer, int Count, Byte InitByte);
extern PACKAGE unsigned __fastcall HelperLoadLibrary(AnsiString ALibFileName);

}	/* namespace Sdcommon */
using namespace Sdcommon;
#pragma option pop	// -w-
#pragma option pop	// -Vx

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif	// SDCommon

⌨️ 快捷键说明

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