00001
00002 #if !defined(__INC_GQL_OBJECT_H)
00003 #define __INC_GQL_OBJECT_H
00004
00005 #include <string>
00006
00007 #include <yehia/object.h>
00008
00009 #include <gql++/exception.h>
00010
00011 namespace GQL
00012 {
00013
00014 class SQLType
00015 {
00016 public:
00017 enum TypeCode
00018 {
00019 VOID,
00020 BOOLEAN, BOOL = BOOLEAN,
00021 DATE,
00022 DECIMAL, NUMERIC = DECIMAL,
00023 FLOAT,
00024 SMALLINT,
00025 INTEGER, INT = INTEGER,
00026 INTERVAL,
00027 TIME,
00028 TIME_WITH_TZ,
00029 TIMESTAMP_WITH_TZ,
00030 CHARACTER, CHAR = CHARACTER,
00031 CHARACTER_VARYING, VARCHAR = CHARACTER_VARYING,
00032 BLOB,
00033
00034 MAX_TYPE
00035 };
00036
00037 SQLType();
00038 SQLType(TypeCode type, ...);
00039 SQLType(const std::string& str);
00040
00041 std::string as_string() const;
00042
00043 TypeCode typecode() const { return(type_); }
00044 int length() const { return(length_); }
00045 int decimals() const { return(decimals_); }
00046 private:
00047 TypeCode type_;
00048 int length_;
00049 int decimals_;
00050 };
00051
00052 class Blob : public Yehia::Object
00053 {
00054 public:
00055 virtual ~Blob();
00056
00057 enum openmode
00058 {
00059 in = 0x01,
00060 out = 0x02
00061 };
00062 enum seek_dir { beg, cur, end };
00063
00064 virtual void open(openmode om = in) = 0;
00065 virtual bool is_open() = 0;
00066 virtual void close() = 0;
00067
00068 virtual int write(const void *data, int len) = 0;
00069 virtual int read(void *data, int len) = 0;
00070 virtual int seek(int offset, seek_dir whence) = 0;
00071 virtual int tell() const = 0;
00072 protected:
00073 Blob() { }
00074 };
00075
00076 class SQLObject : public Yehia::Object
00077 {
00078 public:
00079 SQLObject() {
00080 is_null_ = true;
00081 }
00082 virtual ~SQLObject() { }
00083
00084 void set_null() { is_null_ = true; }
00085 bool is_null() const { return is_null_; }
00086
00087 virtual std::string output() const = 0;
00088 virtual bool input(const std::string& s) = 0;
00089
00090 virtual std::string to_string() const = 0;
00091 virtual long to_int() const = 0;
00092 virtual double to_real() const = 0;
00093 virtual bool to_boolean() const = 0;
00094 virtual Blob *to_blob() const = 0;
00095 virtual SQLType to_type() const = 0;
00096
00097 virtual void from_string(const std::string& s) = 0;
00098 virtual void from_int(long l) = 0;
00099 virtual void from_real(double d) = 0;
00100 virtual void from_boolean(bool b) = 0;
00101 virtual void from_type(const SQLType& type) = 0;
00103 virtual void from_blob(const Blob *blob) = 0;
00104 protected:
00105 void set_null(bool null) { is_null_ = null; }
00106 private:
00107 bool is_null_;
00108 };
00109
00110 class BasicSQLObject : public SQLObject
00111 {
00112 public:
00113 BasicSQLObject();
00114 virtual ~BasicSQLObject();
00115
00116 virtual std::string output() const;
00117 virtual bool input(const std::string& s);
00118
00119 virtual std::string to_string() const;
00120 virtual long to_int() const;
00121 virtual double to_real() const;
00122 virtual bool to_boolean() const;
00123 virtual Blob *to_blob() const;
00124 virtual SQLType to_type() const;
00125
00126 virtual void from_string(const std::string& s);
00127 virtual void from_int(long l);
00128 virtual void from_real(double d);
00129 virtual void from_boolean(bool b);
00130 virtual void from_type(const SQLType& type);
00131 virtual void from_blob(const Blob *blob = 0);
00132 protected:
00133 enum Type { VOID, STRING, INT, FLOAT, TYPE };
00134
00135 Type type() const { return type_; }
00136 private:
00137 Type type_;
00138 std::string value_;
00139 };
00140
00141 }
00142
00143
00144 #endif