Module: DB Interface Module Group: Data Type
RWDBValue RWCollectable
#include <rw/db/value.h> RWDBValue value; //null, no type value RWDBValue value(20); //integer value
RWDBValue provides storage for C++ primitive types, and for structured types used by the DB Interface Module. It also adds null/not null semantics to the primitive types. RWDBValue is used two ways:
Externally, RWDBValue allows your applications to work with data from the database without knowing the data's type. For example, you could write an ad hoc query tool to process and print result data from arbitrary queries that return different types of data. Instead of using specific data types like int or RWDate, you could simply read the data into an RWDBValue instance, and use the asString() method to convert the data into an RWCString.
Internally, RWDBValue provides a value-oriented interface to application programs. See Chapter 7 in the DB Interface Module User's Guide for more information on the data model of the DB Interface Module.
RWDBValue inherits from class RWCollectable of the Essential Tools Module. The virtual functions of the base class RWCollectable are redefined, allowing instances of RWDBValue to be stored in the Smalltalk-like collections of the Essential Tools Module.
enum ValueType { NoType, Char, UnsignedChar, Tiny, // not used for data storage UnsignedTiny, // not used for data storage Short, UnsignedShort, Int, UnsignedInt, Long, UnsignedLong, LongLong, UnsignedLongLong, Float, Double, LongDouble, Decimal, Date, DateTime, Duration, String, Blob, WString MBString, UString, };
Every RWDBValue is tagged with a ValueType. In addition, RWDBColumn uses RWDBValue::ValueType to store schema information. In that context, Tiny and UnsignedTiny refer to one-byte integers. The DB Interface Module does not store data as Tiny or UnsignedTiny.
RWDBValueManip rwdbNull;
rwdbNull is used to represent a literal NULL value.
RWDBValueManip is a typedef:
typedef void (*RWDBValueManip)(RWDBValue&);
RWDBValue();
The default constructor creates a NULL value without type.
RWDBValue(const RWDBValue& value);
Copy constructor. RWDBValue obeys value semantics.
RWDBValue(char value); RWDBValue(unsigned char value); RWDBValue(short value); RWDBValue(unsigned short value); RWDBValue(int value); RWDBValue(unsigned int value); RWDBValue(long value); RWDBValue(unsigned long value); RWDBValue(long long value); RWDBValue(unsigned long long value); RWDBValue(float value); RWDBValue(double value); RWDBValue(long double value); RWDBValue(const char* value); RWDBValue(const RWDecimalPortable& value); RWDBValue(const RWDBDateTime& value); RWDBValue(const RWDBDuration& value); RWDBValue(const RWCString& value); RWDBValue(const RWDBBlob& value); RWDBValue(const RWDate& date); RWDBValue(const wchar_t *value); RWDBValue(const RWWString& value); RWDBValue(const RWDBMBString& value); RWDBValue(const RWBasicUString& value);
Constructs an RWDBValue from the supplied value. Self is non-NULL and is tagged with the appropriate ValueType.
NOTE -- This function accepts Unicode strings. For more information, see the entry for RWBasicUString in the Essential Tools Module Reference Guide. For more information on internationalization, see Chapter 13 of the DB Interface Module User's Guide.
RWDBValue(RWDBValueManip manip);
Constructs an RWDBValue defined by the semantics of manip. In particular, rwdbNull can be used to construct a NULL value without type.
RWDBValue& operator=(const RWDBValue& value);
Assignment operator. RWDBValue obeys value semantics.
RWDBValue& operator=(char value); RWDBValue& operator=(unsigned char value); RWDBValue& operator=(short value); RWDBValue& operator=(unsigned short value); RWDBValue& operator=(int value); RWDBValue& operator=(unsigned int value); RWDBValue& operator=(long value); RWDBValue& operator=(unsigned long value); RWDBValue& operator=(long long value); RWDBValue& operator=(unsigned long long value); RWDBValue& operator=(float value); RWDBValue& operator=(double value); RWDBValue& operator=(long double value); RWDBValue& operator=(const RWDecimalPortable& value); RWDBValue& operator=(const RWDBDateTime& value); RWDBValue& operator=(const RWDBDuration& value); RWDBValue& operator=(const RWCString& value); RWDBValue& operator=(const RWDBBlob& value); RWDBValue& operator=(const RWWString& value); RWDBValue& operator=(const RWDBMBString& value); RWDBValue& operator=(const RWBasicUString& value);
Assigns value's type and value to self.
NOTE -- This function accepts Unicode strings. For more information, see the entry for RWBasicUString in the Essential Tools Module Reference Guide. For more information on internationalization, see Chapter 13 of the DB Interface Module User's Guide.
RWDBValue& operator=(const RWDBValueManip manip);
Assigns a type and value defined by manip to self. In particular, rwdbNull can be assigned to an RWDBValue, changing it into a NULL value without type.
RWDBBlob asBlob() const;
Returns self as an RWDBBlob. If self cannot be converted according to canConvert(RWDBValue::Blob), returns an RWDBBlob with zero length. If self holds data of type RWDBValue::UString, conversion to RWDBBlob checks the endian format used by the current system (Big-Endian or Little-Endian) to give the same RWDBBlob data for the same UString data independent of the endian format of the system.
char asChar() const;
Returns self as a char. If self cannot be converted according to canConvert(RWDBValue::Char), returns a char with value (char)0.
RWDBDateTime asDateTime() const;
Returns self as an RWDBDateTime. If self cannot be converted according to canConvert(RWDBValue::DateTime), returns an RWDBDateTime whose state is invalid.
RWDate asDate() const;
Returns self as an RWDate. If self cannot be converted according to canConvert(RWDBValue::Date), returns an RWDate whose state is invalid.
RWDecimalPortable asDecimal() const;
Returns self as an RWDecimalPortable. If self cannot be converted according to canConvert(RWDBValue::Decimal), returns an RWDecimalPortable with a value of 0.
double asDouble() const;
Returns self as a double. If self cannot be converted according to canConvert(RWDBValue::Double), returns a double with a value of 0.
RWDBDuration asDuration() const;
Returns self as an RWDBDuration. If self cannot be converted according to canConvert(RWDBValue::Duration), returns an RWDBDuration whose state is invalid.
float asFloat() const;
Returns self as a float. If self cannot be converted according to canConvert(RWDBValue::Float), returns a float with a value of 0.
int asInt() const;
Returns self as an int. If self cannot be converted according to canConvert(RWDBValue::Int), returns an int with a value of 0.
long asLong() const;
Returns self as a long. If self cannot be converted according to canConvert(RWDBValue::Long), returns a long with a value of 0.
long double asLongDouble() const;
Returns self as a long double. If self cannot be converted according to canConvert(RWDBValue::long Double), returns a long double with a value of 0.
long long asLongLong() const;
Returns self as a long long. If self cannot be converted according to canConvert(RWDBValue::LongLong), returns a long long with a value of 0.
unsigned long long asUnsignedLongLong() const;
Returns self as an unsigned long long. If self cannot be converted according to canConvert(RWDBValue::UnsignedLongLong), returns an unsigned long long with a value of 0.
RWDBMBString asMBString() const;
Returns self as an RWDBMBString. Any RWDBValue can be converted to an RWDBMBString.
short asShort() const;
Returns self as a short. If self cannot be converted according to canConvert(RWDBValue::Short), returns a short with a value of 0.
RWCString asString() const;
Returns self as an RWCString. Any RWDBValue can be converted to an RWCString. Uses default format specifications.
RWCString asString(const RWDBPhraseBook& phraseBook) const;
Returns self as an RWCString. Any RWDBValue can be converted to an RWCString. Uses format specifications from the supplied phraseBook.
unsigned char asUnsignedChar() const;
Returns self as an unsigned char. If self cannot be converted according to canConvert(RWDBValue::UnsignedChar), returns an unsigned char with a value of (unsigned char) 0.
unsigned int asUnsignedInt() const;
Returns self as an unsigned int. If self cannot be converted according to canConvert(RWDBValue::UnsignedInt), returns an unsigned int with a value of 0.
unsigned long asUnsignedLong() const;
Returns self as an unsigned long. If self cannot be converted according to canConvert(RWDBValue::UnsignedLong), returns an unsigned long with a value of 0.
unsigned short asUnsignedShort() const;
Returns self as an unsigned short. If self cannot be converted according to canConvert(RWDBValue::UnsignedShort), returns an unsigned short with a value of 0.
RWBasicUString asUString() const;
Returns self as an RWBasicUString. If self cannot be converted according to canConvert(RWDBValue::UString) then returns an empty RWBasicUString. If self holds data of type RWDBValue::Blob, conversion to RWBasicUString checks the endian format used by the current system (Big-Endian or Little-Endian) to give the same RWBasicUString data for the same Blob data independent of the endian format of the system.
NOTE -- This function returns a Unicode string. For more information, see the entry for RWBasicUString in the Essential Tools Module Reference Guide. For more information on internationalization, see Chapter 13 of the DB Interface Module User's Guide.
RWWString asWString() const;
Returns self as an RWWString. Any RWDBValue can be converted to an RWWString.
virtual RWspace binaryStoreSize() const;
Redefined from RWCollectable. Returns the number of bytes required to store self in an RWFile.
bool canConvert(ValueType type)const;
Returns true if self can be converted to type by an RWDBValue::asType() method, otherwise returns false. Returns true when:
self's type is String and self is a valid representation of a number
a valid conversion is defined in Table 9
Table 9 shows the supported type conversions. Each row is a data type to be converted, while each column is a conversion type. A 1 means can convert and a 0 means can't convert. For example, Table 9 shows that type Blob can be converted to itself and to String, WString, MBString, and UString.
Type | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | |
a | NoType | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
b | Char | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
c | UnsignedChar | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
d | Short | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
e | UnsignedShort | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
f | Int | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
g | UnsignedInt | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
h | Long | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
i | UnsignedLong | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
j | LongLong | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
k | Unsigned LongLong | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
l | Float | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
m | Double 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
n | LongDouble | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
o | Decimal | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 |
p | Date | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
q | DateTime | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
r | Duration | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 |
s | String | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
t | Blob | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
u | WString | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
v | MBString | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
w | UString | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
Note: Loss of precision can result without warning if you try to push a string representation of a number into a value that can't hold it. If this is a concern, please use RWDecimalPortable, as in the following example:
RWDBValue aNumber("12345.6789"); Assert(aNumber.canConvert(RWDBValue::Char)); char numberThatIsTooSmall = aNumber.asChar(); // No way that // 12345.6789 can fit. assert(aNumber.canConvert(RWDBValue::Decimal)); RWDecimalPortable bigEnough = aNumber.asDecimal(); // This // is OK.
virtual int compareTo(const RWCollectable* cp) const;
Redefined from RWCollectable. Interprets cp as a pointer to an RWDBValue, dereferences it, and compares the result with self. If either self or *cp is NULL, the result is undefined. Otherwise, if self and *cp have the same type, the result is -1, 0, or 1, depending upon whether or not self is less than, equal to, or greater than *cp, according to the semantics of self's type. Otherwise self and *cp have different types, and the result is defined only as being nonzero.
virtual unsigned hash() const;
Redefined from RWCollectable. Returns a suitable value for hashing.
virtual RWClassID isA() const;
Redefined from RWCollectable. Returns __RWDBVALUE.
virtual bool isEqual(const RWCollectable* cp) const;
Redefined from RWCollectable. Returns true if compareTo(cp) == 0, otherwise returns false.
bool isNull() const;
Returns true if self represents a NULL value, otherwise returns false. Note that the results of arithmetic and logical operations on NULL values are undefined; checks for NULL must be made independently.
virtual void restoreGuts(const RWFile& file);
Redefined from RWCollectable. Replaces the value of self with a value read from file.
virtual void restoreGuts(const RWvistream& vis);
Redefined from RWCollectable. Replaces the value of self with a value read from vis.
virtual void saveGuts(const RWFile& file) const;
Redefined from RWCollectable. Writes self file.
virtual void saveGuts(const RWvostream& vos) const;
Redefined from RWCollectable. Writes self to vos.
ValueType type() const;
Returns the data type of self.
RWCString typeString() const;
Returns the data type of self formatted as a string.
© Copyright Rogue Wave Software, Inc. All Rights Reserved.
Rogue Wave and SourcePro are registered trademarks of Rogue Wave Software, Inc. in the United States and other countries. All other trademarks are the property of their respective owners.
Contact Rogue Wave about documentation or support issues.