gambas-source-code/gb.db.sqlite2/src/qry_dat.h
Benoît Minisini f65184802d [CONFIGURATION]
* NEW: Update copyright and license string in all source files.


git-svn-id: svn://localhost/gambas/trunk@2241 867c0c6c-44f3-4631-809d-bfa615b0a4ec
2009-08-17 10:41:51 +00:00

300 lines
6.7 KiB
C++

/***************************************************************************
qry_dat.h
(c) 2000-2009 Benoît Minisini <gambas@users.sourceforge.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
***************************************************************************/
/**********************************************************************
* Copyright (c) 2002, Leo Seib, Hannover
*
* Project:Dataset C++ Dynamic Library
* Module: FieldValue class and result sets classes header file
* Author: Leo Seib E-Mail: lev@almaty.pointstrike.net
* Begin: 5/04/2002
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
**********************************************************************/
using namespace std;
#include <string>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
#include <map>
#include <vector>
#include <iostream>
#include "sqlite.h"
enum fType
{
ft_String,
ft_Boolean,
ft_Char,
ft_WChar,
ft_WideString,
ft_Short,
ft_UShort,
ft_Long,
ft_ULong,
ft_Float,
ft_Double,
ft_LongDouble,
ft_Date,
ft_Object,
};
/* Size of Strings for fType */
#define ft_Boolean_Length 5 //TRUE or FALSE
#define ft_Short_Length 10
#define ft_LongDouble_Length 32
#define ft_Long_Length 12
#define ft_Float_Length 16
#define ft_Date_Length 19
#define ft_Double_Length 32
class field_value
{
private:
fType field_type;
string str_value;
bool is_null;
int len;
public:
field_value();
~field_value();
int get_len() const { return len; }
fType get_fType() const
{
return field_type;
}
fType get_field_type() const
{
return field_type;
}
string gft();
bool get_isNull() const
{
return is_null;
}
string get_asString() const;
bool get_asBool() const;
int get_asInteger() const;
#if 0
char get_asChar() const;
short get_asShort() const;
unsigned short get_asUShort() const;
long get_asLong() const;
unsigned long get_asULong() const;
double get_asDouble() const;
#endif
#if 0
field_value & operator=(const char *s)
{
set_asString(s);
return *this;
}
field_value & operator=(const string & s)
{
set_asString(s);
return *this;
}
#endif
#if 0
field_value & operator=(const bool b)
{
set_asBool(b);
return *this;
}
field_value & operator=(const short s)
{
set_asShort(s);
return *this;
}
field_value & operator=(const unsigned short us)
{
set_asUShort(us);
return *this;
}
field_value & operator=(const long l)
{
set_asLong(l);
return *this;
}
field_value & operator=(const unsigned long l)
{
set_asULong(l);
return *this;
}
field_value & operator=(const int i)
{
set_asLong(i);
return *this;
}
field_value & operator=(const double d)
{
set_asDouble(d);
return *this;
}
#endif
field_value & operator=(const field_value & fv);
//class ostream;
#if 0
friend ostream & operator<<(ostream & os, const field_value & fv)
{
switch (fv.get_fType())
{
case ft_String:
case ft_WideString:
case ft_WChar:
case ft_Object:
{
return os << fv.get_asString();
break;
}
case ft_Date:
{
return os << fv.get_asString();
break;
}
case ft_Boolean:
{
return os << fv.get_asBool();
break;
}
case ft_Char:
{
return os << fv.get_asChar();
break;
}
case ft_Short:
{
return os << fv.get_asShort();
break;
}
case ft_UShort:
{
return os << fv.get_asUShort();
break;
}
case ft_Long:
{
return os << fv.get_asLong();
break;
}
case ft_ULong:
{
return os << fv.get_asULong();
break;
}
case ft_Float:
case ft_LongDouble:
case ft_Double:
{
return os << fv.get_asDouble();
break;
}
}
}
#endif
void set_isNull(fType f)
{
is_null = true;
field_type = f;
str_value = "";
}
void set_asString(const char *s, fType type);
void set_asString(const string & s, fType type);
/*void set_asBool(const bool b);
void set_asChar(const char c);
void set_asShort(const short s);
void set_asUShort(const unsigned short us);
void set_asInteger(const int i);
void set_asLong(const long l);
void set_asULong(const unsigned long l);
void set_asDouble(const double d);
void set_asDate(const char *s); //NG
void set_asDate(const string & s); //NG*/
};
struct field_prop
{
string name, display_name;
fType type;
string field_table; //?
bool read_only;
unsigned int field_len;
unsigned int field_flags;
unsigned int notnull;
int idx;
};
struct field
{
field_prop props;
field_value val;
};
typedef map < int, field > Fields;
typedef map < int, field_value > sql_record;
typedef map < int, field_prop > record_prop;
typedef map < int, sql_record > query_data;
typedef field_value variant;
//typedef Fields::iterator fld_itor;
typedef sql_record::iterator rec_itor;
typedef record_prop::iterator recprop_itor;
typedef query_data::iterator qry_itor;
struct result_set
{
sqlite *conn; //NG
record_prop record_header;
query_data records;
};