|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
#include "sqldatetime.h"
|
|
|
|
|
|
|
|
|
|
|
|
class CSqlVariant
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
enum Type
|
|
|
|
|
|
{
|
|
|
|
|
|
Invalid = 0,
|
|
|
|
|
|
Bool,
|
|
|
|
|
|
Char,
|
|
|
|
|
|
UChar,
|
|
|
|
|
|
Short,
|
|
|
|
|
|
UShort,
|
|
|
|
|
|
Int,
|
|
|
|
|
|
UInt,
|
|
|
|
|
|
LongLong,
|
|
|
|
|
|
ULongLong,
|
|
|
|
|
|
Float,
|
|
|
|
|
|
Double,
|
|
|
|
|
|
Date,
|
|
|
|
|
|
Time,
|
|
|
|
|
|
DateTime,
|
|
|
|
|
|
String,
|
|
|
|
|
|
ByteArray
|
|
|
|
|
|
};
|
|
|
|
|
|
public:
|
|
|
|
|
|
CSqlVariant();
|
|
|
|
|
|
CSqlVariant(Type type);
|
|
|
|
|
|
CSqlVariant(char v);
|
|
|
|
|
|
CSqlVariant(bool v);
|
|
|
|
|
|
CSqlVariant(int v);
|
|
|
|
|
|
CSqlVariant(unsigned int v);
|
|
|
|
|
|
CSqlVariant(long long v);
|
|
|
|
|
|
CSqlVariant(unsigned long long v);
|
|
|
|
|
|
CSqlVariant(float v);
|
|
|
|
|
|
CSqlVariant(double v);
|
|
|
|
|
|
CSqlVariant(short v);
|
|
|
|
|
|
CSqlVariant(unsigned short v);
|
|
|
|
|
|
CSqlVariant(unsigned char v);
|
|
|
|
|
|
CSqlVariant(const CSqlDate &v);
|
|
|
|
|
|
CSqlVariant(const CSqlTime &v);
|
|
|
|
|
|
CSqlVariant(const CSqlDateTime &v);
|
|
|
|
|
|
CSqlVariant(const char *v);
|
|
|
|
|
|
CSqlVariant(const char* v,unsigned int len,bool bIsByteArray);
|
|
|
|
|
|
CSqlVariant(const std::string &v ,bool bIsByteArray= false);
|
|
|
|
|
|
CSqlVariant(const CSqlVariant &O);
|
|
|
|
|
|
CSqlVariant &operator=(const CSqlVariant &o);
|
|
|
|
|
|
~CSqlVariant();
|
|
|
|
|
|
|
|
|
|
|
|
bool operator==(const CSqlVariant &o) const;
|
|
|
|
|
|
bool operator!=(const CSqlVariant &o) const;
|
|
|
|
|
|
|
|
|
|
|
|
template<typename T> T ToValue() const { T v; ToValue(v); return v; }
|
|
|
|
|
|
int ToValue(int &v)const;
|
|
|
|
|
|
unsigned int ToValue(unsigned int &v) const;
|
|
|
|
|
|
long long ToValue(long long &v) const;
|
|
|
|
|
|
unsigned long long ToValue(unsigned long long &v) const;
|
|
|
|
|
|
bool ToValue(bool &v)const;
|
|
|
|
|
|
float ToValue(float &v) const;
|
|
|
|
|
|
double ToValue(double &v)const;
|
|
|
|
|
|
std::string & ToValue(std::string &v) const;
|
|
|
|
|
|
char ToValue(char &v) const;
|
|
|
|
|
|
unsigned char ToValue(unsigned char &v) const;
|
|
|
|
|
|
short ToValue(short &v)const;
|
|
|
|
|
|
unsigned short ToValue(unsigned short &v) const;
|
|
|
|
|
|
CSqlDate & ToValue(CSqlDate &v)const;
|
|
|
|
|
|
CSqlTime & ToValue(CSqlTime &v)const;
|
|
|
|
|
|
CSqlDateTime & ToValue(CSqlDateTime &v)const;
|
|
|
|
|
|
const void *GetData()const;
|
|
|
|
|
|
unsigned int GetDataLen()const;
|
|
|
|
|
|
void* GetBuffer();
|
|
|
|
|
|
int GetBufferLen()const;
|
|
|
|
|
|
void SetDataLen(int nlen);
|
|
|
|
|
|
void SetBufferLen(int nlen);
|
|
|
|
|
|
void ReleaseBuffer();
|
|
|
|
|
|
void SetType(Type type);
|
|
|
|
|
|
Type GetType()const;
|
|
|
|
|
|
const char*GetTypeName()const;
|
|
|
|
|
|
bool CanConvertTo(Type t)const;
|
|
|
|
|
|
bool IsNull()const;
|
|
|
|
|
|
void SetNull(bool bNull);
|
|
|
|
|
|
private:
|
|
|
|
|
|
void CopyFrom(const CSqlVariant &o);
|
|
|
|
|
|
void InitBuffer(unsigned int len);
|
|
|
|
|
|
void InitData(const char*v,unsigned int len);
|
|
|
|
|
|
void FreeBuffer();
|
|
|
|
|
|
union
|
|
|
|
|
|
{
|
|
|
|
|
|
bool b;
|
|
|
|
|
|
char c;
|
|
|
|
|
|
unsigned char uc;
|
|
|
|
|
|
short s;
|
|
|
|
|
|
unsigned short us;
|
|
|
|
|
|
int i;
|
|
|
|
|
|
unsigned int ui; //also store the time,date
|
|
|
|
|
|
long long ll;
|
|
|
|
|
|
unsigned long long ull; //also store the datetime
|
|
|
|
|
|
float f;
|
|
|
|
|
|
double d;
|
|
|
|
|
|
int *p; //format :[ref_count][buf_len][data_len][data][....] ,<2C><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>Թ<EFBFBD><D4B9><EFBFBD>ʹ<EFBFBD>á<EFBFBD><C3A1>̲߳<DFB3><CCB2><EFBFBD>ȫ
|
|
|
|
|
|
// p[0] p[1] p[2] [p3]
|
|
|
|
|
|
} m_data;
|
|
|
|
|
|
Type m_type;
|
|
|
|
|
|
unsigned int m_is_null;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#define VARINTARR std::vector<CSqlVariant>
|