Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
4dafdf16
Commit
4dafdf16
authored
Dec 16, 2013
by
Alexander Barkov
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.0-connect -> 10.0.
parents
0c0fe7a8
d8ac8d18
Changes
49
Hide whitespace changes
Inline
Side-by-side
Showing
49 changed files
with
4196 additions
and
496 deletions
+4196
-496
storage/connect/colblk.cpp
storage/connect/colblk.cpp
+6
-1
storage/connect/colblk.h
storage/connect/colblk.h
+1
-0
storage/connect/connect.cc
storage/connect/connect.cc
+32
-8
storage/connect/ha_connect.cc
storage/connect/ha_connect.cc
+155
-62
storage/connect/mycat.cc
storage/connect/mycat.cc
+25
-15
storage/connect/mycat.h
storage/connect/mycat.h
+1
-0
storage/connect/myconn.cpp
storage/connect/myconn.cpp
+42
-32
storage/connect/mysql-test/connect/my.cnf
storage/connect/mysql-test/connect/my.cnf
+2
-0
storage/connect/mysql-test/connect/r/mysql.result
storage/connect/mysql-test/connect/r/mysql.result
+35
-0
storage/connect/mysql-test/connect/r/mysql_discovery.result
storage/connect/mysql-test/connect/r/mysql_discovery.result
+4
-10
storage/connect/mysql-test/connect/r/mysql_new.result
storage/connect/mysql-test/connect/r/mysql_new.result
+1
-1
storage/connect/mysql-test/connect/r/odbc.result
storage/connect/mysql-test/connect/r/odbc.result
+47
-0
storage/connect/mysql-test/connect/r/odbc_postgresql.result
storage/connect/mysql-test/connect/r/odbc_postgresql.result
+296
-0
storage/connect/mysql-test/connect/r/odbc_sqlite3.result
storage/connect/mysql-test/connect/r/odbc_sqlite3.result
+2410
-0
storage/connect/mysql-test/connect/r/unsigned.result
storage/connect/mysql-test/connect/r/unsigned.result
+61
-0
storage/connect/mysql-test/connect/r/xml.result
storage/connect/mysql-test/connect/r/xml.result
+1
-1
storage/connect/mysql-test/connect/r/xml_mdev5261.result
storage/connect/mysql-test/connect/r/xml_mdev5261.result
+25
-0
storage/connect/mysql-test/connect/std_data/test.sqlite3
storage/connect/mysql-test/connect/std_data/test.sqlite3
+0
-0
storage/connect/mysql-test/connect/t/have_libxml2.inc
storage/connect/mysql-test/connect/t/have_libxml2.inc
+17
-0
storage/connect/mysql-test/connect/t/have_odbc.inc
storage/connect/mysql-test/connect/t/have_odbc.inc
+9
-0
storage/connect/mysql-test/connect/t/have_odbc_postgresql.inc
...age/connect/mysql-test/connect/t/have_odbc_postgresql.inc
+15
-0
storage/connect/mysql-test/connect/t/mysql.test
storage/connect/mysql-test/connect/t/mysql.test
+20
-0
storage/connect/mysql-test/connect/t/odbc.test
storage/connect/mysql-test/connect/t/odbc.test
+25
-0
storage/connect/mysql-test/connect/t/odbc_postgresql.sql
storage/connect/mysql-test/connect/t/odbc_postgresql.sql
+27
-0
storage/connect/mysql-test/connect/t/odbc_postgresql.test
storage/connect/mysql-test/connect/t/odbc_postgresql.test
+198
-0
storage/connect/mysql-test/connect/t/odbc_sqlite3.test
storage/connect/mysql-test/connect/t/odbc_sqlite3.test
+90
-79
storage/connect/mysql-test/connect/t/unsigned.test
storage/connect/mysql-test/connect/t/unsigned.test
+35
-0
storage/connect/mysql-test/connect/t/xml.test
storage/connect/mysql-test/connect/t/xml.test
+1
-15
storage/connect/mysql-test/connect/t/xml_grant.test
storage/connect/mysql-test/connect/t/xml_grant.test
+1
-16
storage/connect/mysql-test/connect/t/xml_mdev5261.test
storage/connect/mysql-test/connect/t/xml_mdev5261.test
+27
-0
storage/connect/myutil.cpp
storage/connect/myutil.cpp
+11
-6
storage/connect/myutil.h
storage/connect/myutil.h
+3
-3
storage/connect/odbconn.cpp
storage/connect/odbconn.cpp
+105
-15
storage/connect/plgdbsem.h
storage/connect/plgdbsem.h
+3
-1
storage/connect/plgdbutl.cpp
storage/connect/plgdbutl.cpp
+14
-0
storage/connect/tabdos.cpp
storage/connect/tabdos.cpp
+11
-2
storage/connect/tabfix.cpp
storage/connect/tabfix.cpp
+6
-1
storage/connect/table.cpp
storage/connect/table.cpp
+9
-0
storage/connect/tabmysql.cpp
storage/connect/tabmysql.cpp
+7
-2
storage/connect/tabodbc.cpp
storage/connect/tabodbc.cpp
+1
-1
storage/connect/tabutil.cpp
storage/connect/tabutil.cpp
+17
-7
storage/connect/user_connect.cc
storage/connect/user_connect.cc
+2
-1
storage/connect/valblk.cpp
storage/connect/valblk.cpp
+148
-36
storage/connect/valblk.h
storage/connect/valblk.h
+16
-15
storage/connect/value.cpp
storage/connect/value.cpp
+209
-119
storage/connect/value.h
storage/connect/value.h
+21
-46
storage/connect/xobject.cpp
storage/connect/xobject.cpp
+2
-0
storage/connect/xobject.h
storage/connect/xobject.h
+1
-1
storage/connect/xtable.h
storage/connect/xtable.h
+1
-0
No files found.
storage/connect/colblk.cpp
View file @
4dafdf16
...
...
@@ -41,6 +41,7 @@ COLBLK::COLBLK(PCOLDEF cdp, PTDB tdbp, int i)
Buf_Type
=
cdp
->
Buf_Type
;
ColUse
|=
cdp
->
Flags
;
// Used by CONNECT
Nullable
=
!!
(
cdp
->
Flags
&
U_NULLS
);
Unsigned
=
!!
(
cdp
->
Flags
&
U_UNSIGNED
);
}
else
{
Name
=
NULL
;
memset
(
&
Format
,
0
,
sizeof
(
FORMAT
));
...
...
@@ -48,6 +49,7 @@ COLBLK::COLBLK(PCOLDEF cdp, PTDB tdbp, int i)
Long
=
0
;
Buf_Type
=
TYPE_ERROR
;
Nullable
=
false
;
Unsigned
=
false
;
}
// endif cdp
To_Tdb
=
tdbp
;
...
...
@@ -171,9 +173,12 @@ bool COLBLK::InitValue(PGLOBAL g)
if
(
Value
)
return
false
;
// Already done
// Unsigned can be set only for valid value types
int
prec
=
(
Unsigned
)
?
1
:
GetPrecision
();
// Allocate a Value object
if
(
!
(
Value
=
AllocateValue
(
g
,
Buf_Type
,
Format
.
Length
,
GetPrecision
()
,
GetDomain
())))
prec
,
GetDomain
())))
return
true
;
AddStatus
(
BUF_READY
);
...
...
storage/connect/colblk.h
View file @
4dafdf16
...
...
@@ -83,6 +83,7 @@ class DllExport COLBLK : public XOBJECT {
PTDB
To_Tdb
;
// Points to Table Descriptor Block
PXCOL
To_Kcol
;
// Points to Xindex matching column
bool
Nullable
;
// True if nullable
bool
Unsigned
;
// True if unsigned
int
Index
;
// Column number in table
int
Opt
;
// Cluster/sort information
int
Buf_Type
;
// Data type
...
...
storage/connect/connect.cc
View file @
4dafdf16
...
...
@@ -591,7 +591,7 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id)
if
(
!
ptdb
)
return
-
1
;
else
if
(
!
((
PTDBASE
)
ptdb
)
->
GetDef
()
->
Indexable
())
{
sprintf
(
g
->
Message
,
"Table %s is not indexable"
,
ptdb
->
GetName
());
sprintf
(
g
->
Message
,
"
CntIndexInit:
Table %s is not indexable"
,
ptdb
->
GetName
());
return
0
;
}
else
tdbp
=
(
PTDBDOX
)
ptdb
;
...
...
@@ -685,6 +685,7 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
char
*
kp
=
(
char
*
)
key
;
int
n
;
short
lg
;
bool
rcb
;
RCODE
rc
;
PVAL
valp
;
PCOL
colp
;
...
...
@@ -694,7 +695,7 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
if
(
!
ptdb
)
return
RC_FX
;
if
(
!
((
PTDBASE
)
ptdb
)
->
GetDef
()
->
Indexable
())
{
sprintf
(
g
->
Message
,
"Table %s is not indexable"
,
ptdb
->
GetName
());
sprintf
(
g
->
Message
,
"
CntIndexRead:
Table %s is not indexable"
,
ptdb
->
GetName
());
return
RC_FX
;
}
else
tdbp
=
(
PTDBDOX
)
ptdb
;
...
...
@@ -719,9 +720,20 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
if
(
colp
->
GetColUse
(
U_VAR
))
{
lg
=
*
(
short
*
)
kp
;
kp
+=
sizeof
(
short
);
valp
->
SetValue_char
(
kp
,
(
int
)
lg
);
rcb
=
valp
->
SetValue_char
(
kp
,
(
int
)
lg
);
}
else
valp
->
SetValue_char
(
kp
,
valp
->
GetClen
());
rcb
=
valp
->
SetValue_char
(
kp
,
valp
->
GetClen
());
if
(
rcb
)
{
if
(
tdbp
->
RowNumber
(
g
))
sprintf
(
g
->
Message
,
"Out of range value for column %s at row %d"
,
colp
->
GetName
(),
tdbp
->
RowNumber
(
g
));
else
sprintf
(
g
->
Message
,
"Out of range value for column %s"
,
colp
->
GetName
());
PushWarning
(
g
,
tdbp
);
}
// endif b
}
else
valp
->
SetBinValue
((
void
*
)
kp
);
...
...
@@ -759,7 +771,7 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
const
uchar
*
p
,
*
kp
;
int
i
,
n
,
k
[
2
];
short
lg
;
bool
b
;
bool
b
,
rcb
;
PVAL
valp
;
PCOL
colp
;
PTDBDOX
tdbp
;
...
...
@@ -768,7 +780,7 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
if
(
!
ptdb
)
return
-
1
;
else
if
(
!
((
PTDBASE
)
ptdb
)
->
GetDef
()
->
Indexable
())
{
sprintf
(
g
->
Message
,
"Table %s is not indexable"
,
ptdb
->
GetName
());
sprintf
(
g
->
Message
,
"
CntIndexRange:
Table %s is not indexable"
,
ptdb
->
GetName
());
DBUG_PRINT
(
"Range"
,
(
"%s"
,
g
->
Message
));
return
-
1
;
}
else
...
...
@@ -802,9 +814,21 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
if
(
colp
->
GetColUse
(
U_VAR
))
{
lg
=
*
(
short
*
)
p
;
p
+=
sizeof
(
short
);
valp
->
SetValue_char
((
char
*
)
p
,
(
int
)
lg
);
rcb
=
valp
->
SetValue_char
((
char
*
)
p
,
(
int
)
lg
);
}
else
valp
->
SetValue_char
((
char
*
)
p
,
valp
->
GetClen
());
rcb
=
valp
->
SetValue_char
((
char
*
)
p
,
valp
->
GetClen
());
if
(
rcb
)
{
if
(
tdbp
->
RowNumber
(
g
))
sprintf
(
g
->
Message
,
"Out of range value for column %s at row %d"
,
colp
->
GetName
(),
tdbp
->
RowNumber
(
g
));
else
sprintf
(
g
->
Message
,
"Out of range value for column %s"
,
colp
->
GetName
());
PushWarning
(
g
,
tdbp
);
}
// endif b
}
else
valp
->
SetBinValue
((
void
*
)
p
);
...
...
storage/connect/ha_connect.cc
View file @
4dafdf16
...
...
@@ -165,7 +165,7 @@ extern "C" char nmfile[];
extern
"C"
char
pdebug
[];
extern
"C"
{
char
version
[]
=
"Version 1.01.00
09 October 29
, 2013"
;
char
version
[]
=
"Version 1.01.00
10 November 30
, 2013"
;
#if defined(XMSG)
char
msglang
[];
// Default message language
...
...
@@ -777,7 +777,7 @@ int ha_connect::GetIntegerOption(char *opname)
if
(
opval
==
(
ulonglong
)
NO_IVAL
&&
options
&&
options
->
oplist
)
if
((
pv
=
GetListOption
(
xp
->
g
,
opname
,
options
->
oplist
)))
opval
=
(
unsigned
)
atoll
(
pv
);
opval
=
CharToNumber
(
pv
,
strlen
(
pv
),
ULONGLONG_MAX
,
true
);
return
(
int
)
opval
;
}
// end of GetIntegerOption
...
...
@@ -936,6 +936,12 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
break
;
}
// endswitch type
if
(
fp
->
flags
&
UNSIGNED_FLAG
)
pcf
->
Flags
|=
U_UNSIGNED
;
if
(
fp
->
flags
&
ZEROFILL_FLAG
)
pcf
->
Flags
|=
U_ZEROFILL
;
// This is used to skip null bit
if
(
fp
->
real_maybe_null
())
pcf
->
Flags
|=
U_NULLS
;
...
...
@@ -1341,7 +1347,15 @@ int ha_connect::MakeRecord(char *buf)
}
else
if
(
fp
->
store
(
value
->
GetFloatValue
()))
{
rc
=
HA_ERR_WRONG_IN_RECORD
;
// rc= HA_ERR_WRONG_IN_RECORD; a Warning was ignored
char
buf
[
128
];
THD
*
thd
=
ha_thd
();
sprintf
(
buf
,
"Out of range value for column '%s' at row %ld"
,
fp
->
field_name
,
thd
->
get_stmt_da
()
->
current_row_for_warning
());
push_warning
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
0
,
buf
);
DBUG_PRINT
(
"MakeRecord"
,
(
"%s"
,
value
->
GetCharString
(
val
)));
}
// endif store
...
...
@@ -1930,7 +1944,7 @@ int ha_connect::optimize(THD* thd, HA_CHECK_OPT* check_opt)
if
(
tdbp
||
(
tdbp
=
GetTDB
(
g
)))
{
if
(
!
((
PTDBASE
)
tdbp
)
->
GetDef
()
->
Indexable
())
{
sprintf
(
g
->
Message
,
"Table %s is not indexable"
,
tdbp
->
GetName
());
sprintf
(
g
->
Message
,
"
optimize:
Table %s is not indexable"
,
tdbp
->
GetName
());
rc
=
HA_ERR_INTERNAL_ERROR
;
}
else
if
((
rc
=
((
PTDBASE
)
tdbp
)
->
ResetTableOpt
(
g
,
true
)))
{
if
(
rc
==
RC_INFO
)
{
...
...
@@ -2392,9 +2406,12 @@ int ha_connect::rnd_init(bool scan)
if
(
!
g
||
!
table
||
xmod
==
MODE_INSERT
)
DBUG_RETURN
(
HA_ERR_INITIALIZATION
);
//
C
lose the table if it was opened yet (locked?)
//
Do not c
lose the table if it was opened yet (locked?)
if
(
IsOpened
())
CloseTable
(
g
);
DBUG_RETURN
(
0
);
// CloseTable(g); Was done before making things done twice
else
if
(
xp
->
CheckQuery
(
valid_query_id
))
tdbp
=
NULL
;
// Not valid anymore
// When updating, to avoid skipped update, force the table
// handler to retrieve write-only fields to be able to compare
...
...
@@ -2521,7 +2538,7 @@ int ha_connect::rnd_next(uchar *buf)
void
ha_connect
::
position
(
const
uchar
*
record
)
{
DBUG_ENTER
(
"ha_connect::position"
);
if
(((
PTDBASE
)
tdbp
)
->
GetDef
()
->
Indexable
())
//
if (((PTDBASE)tdbp)->GetDef()->Indexable())
my_store_ptr
(
ref
,
ref_length
,
(
my_off_t
)((
PTDBASE
)
tdbp
)
->
GetRecpos
());
DBUG_VOID_RETURN
;
}
// end of position
...
...
@@ -3030,12 +3047,18 @@ int ha_connect::external_lock(THD *thd, int lock_type)
rc
=
2
;
// Logical error ???
else
if
(
g
->
Xchk
)
{
if
(
!
tdbp
||
*
tdbp
->
GetName
()
==
'#'
)
{
if
(
!
tdbp
&&
!
(
tdbp
=
GetTDB
(
g
)))
DBUG_RETURN
(
HA_ERR_INTERNAL_ERROR
);
else
if
(
!
((
PTDBASE
)
tdbp
)
->
GetDef
()
->
Indexable
())
{
sprintf
(
g
->
Message
,
"external_lock: Table %s is not indexable"
,
tdbp
->
GetName
());
// DBUG_RETURN(HA_ERR_INTERNAL_ERROR);
push_warning
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
0
,
g
->
Message
);
DBUG_RETURN
(
0
);
}
// endif Indexable
bool
oldsep
=
((
PCHK
)
g
->
Xchk
)
->
oldsep
;
bool
newsep
=
((
PCHK
)
g
->
Xchk
)
->
newsep
;
PTDBDOS
tdp
=
(
PTDBDOS
)(
tdbp
?
tdbp
:
GetTDB
(
g
));
if
(
!
tdp
)
DBUG_RETURN
(
HA_ERR_INTERNAL_ERROR
);
PTDBDOS
tdp
=
(
PTDBDOS
)
tdbp
;
PDOSDEF
ddp
=
(
PDOSDEF
)
tdp
->
GetDef
();
PIXDEF
xp
,
xp1
,
xp2
,
drp
=
NULL
,
adp
=
NULL
;
...
...
@@ -3145,7 +3168,8 @@ int ha_connect::external_lock(THD *thd, int lock_type)
g
->
Xchk
=
new
(
g
)
XCHK
;
((
PCHK
)
g
->
Xchk
)
->
oldsep
=
GetBooleanOption
(
"Sepindex"
,
false
);
((
PCHK
)
g
->
Xchk
)
->
oldpix
=
GetIndexInfo
();
}
// endif xcheck
}
else
g
->
Xchk
=
NULL
;
if
(
cras
)
g
->
Createas
=
1
;
// To tell created table to ignore FLAG
...
...
@@ -3464,25 +3488,45 @@ static bool add_fields(PGLOBAL g,
// void *vcolinfo,
// engine_option_value *create_options,
int
flg
,
bool
dbf
)
bool
dbf
,
char
v
)
{
register
Create_field
*
new_field
;
char
*
length
,
*
decimals
;
enum_field_types
type
=
PLGtoMYSQL
(
typ
,
dbf
)
;
char
*
length
,
*
decimals
=
NULL
;
enum_field_types
type
;
//Virtual_column_info *vcol_info= (Virtual_column_info *)vcolinfo;
engine_option_value
*
crop
;
LEX_STRING
*
comment
=
thd
->
make_lex_string
(
rem
,
strlen
(
rem
))
;
LEX_STRING
*
field_name
=
thd
->
make_lex_string
(
name
,
strlen
(
name
))
;
LEX_STRING
*
comment
;
LEX_STRING
*
field_name
;
DBUG_ENTER
(
"ha_connect::add_fields"
);
length
=
(
char
*
)
PlugSubAlloc
(
g
,
NULL
,
8
);
sprintf
(
length
,
"%d"
,
len
);
if
(
dec
)
{
decimals
=
(
char
*
)
PlugSubAlloc
(
g
,
NULL
,
8
);
sprintf
(
decimals
,
"%d"
,
dec
);
if
(
len
)
{
if
(
!
v
&&
typ
==
TYPE_STRING
&&
len
>
255
)
v
=
'V'
;
// Change CHAR to VARCHAR
length
=
(
char
*
)
PlugSubAlloc
(
g
,
NULL
,
8
);
sprintf
(
length
,
"%d"
,
len
);
if
(
typ
==
TYPE_FLOAT
)
{
decimals
=
(
char
*
)
PlugSubAlloc
(
g
,
NULL
,
8
);
sprintf
(
decimals
,
"%d"
,
min
(
dec
,
(
min
(
len
,
31
)
-
1
)));
}
// endif dec
}
else
decimals
=
NULL
;
length
=
NULL
;
if
(
!
rem
)
rem
=
""
;
type
=
PLGtoMYSQL
(
typ
,
dbf
,
v
);
comment
=
thd
->
make_lex_string
(
rem
,
strlen
(
rem
));
field_name
=
thd
->
make_lex_string
(
name
,
strlen
(
name
));
switch
(
v
)
{
case
'Z'
:
type_modifier
|=
ZEROFILL_FLAG
;
case
'U'
:
type_modifier
|=
UNSIGNED_FLAG
;
break
;
}
// endswitch v
if
(
flg
)
{
engine_option_value
*
start
=
NULL
,
*
end
=
NULL
;
...
...
@@ -3511,7 +3555,7 @@ static bool add_fields(PGLOBAL g,
#else // !NEW_WAY
static
bool
add_field
(
String
*
sql
,
const
char
*
field_name
,
int
typ
,
int
len
,
int
dec
,
uint
tm
,
const
char
*
rem
,
int
flag
,
bool
dbf
,
char
v
)
char
*
dft
,
int
flag
,
bool
dbf
,
char
v
)
{
char
var
=
(
len
>
255
)
?
'V'
:
v
;
bool
error
=
false
;
...
...
@@ -3528,16 +3572,33 @@ static bool add_field(String *sql, const char *field_name, int typ,
if
(
!
strcmp
(
type
,
"DOUBLE"
))
{
error
|=
sql
->
append
(
','
);
// dec must be <
= len and <=
31
error
|=
sql
->
append_ulonglong
(
min
(
dec
,
(
len
-
1
)));
// dec must be <
len and <
31
error
|=
sql
->
append_ulonglong
(
min
(
dec
,
(
min
(
len
,
31
)
-
1
)));
}
// endif dec
error
|=
sql
->
append
(
')'
);
}
// endif len
if
(
v
==
'U'
)
error
|=
sql
->
append
(
" UNSIGNED"
);
else
if
(
v
==
'Z'
)
error
|=
sql
->
append
(
" ZEROFILL"
);
if
(
tm
)
error
|=
sql
->
append
(
STRING_WITH_LEN
(
" NOT NULL"
),
system_charset_info
);
if
(
dft
&&
*
dft
)
{
error
|=
sql
->
append
(
" DEFAULT "
);
if
(
IsTypeChar
(
typ
))
{
error
|=
sql
->
append
(
"'"
);
error
|=
sql
->
append_for_single_quote
(
dft
,
strlen
(
dft
));
error
|=
sql
->
append
(
"'"
);
}
else
error
|=
sql
->
append
(
dft
);
}
// endif rem
if
(
rem
&&
*
rem
)
{
error
|=
sql
->
append
(
" COMMENT '"
);
error
|=
sql
->
append_for_single_quote
(
rem
,
strlen
(
rem
));
...
...
@@ -3808,7 +3869,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
TABLE_SHARE
*
table_s
,
HA_CREATE_INFO
*
create_info
)
{
char
spc
=
','
,
qch
=
0
;
char
v
,
spc
=
','
,
qch
=
0
;
const
char
*
fncn
=
"?"
;
const
char
*
user
,
*
fn
,
*
db
,
*
host
,
*
pwd
,
*
sep
,
*
tbl
,
*
src
;
const
char
*
col
,
*
ocl
,
*
rnk
,
*
pic
,
*
fcl
;
...
...
@@ -3830,7 +3891,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
//CHARSET_INFO *cs;
Alter_info
alter_info
;
#else // !NEW_WAY
char
v
,
buf
[
1024
];
char
buf
[
1024
];
String
sql
(
buf
,
sizeof
(
buf
),
system_charset_info
);
sql
.
copy
(
STRING_WITH_LEN
(
"CREATE TABLE whatever ("
),
system_charset_info
);
...
...
@@ -3924,7 +3985,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
tab
=
table_s
->
table_name
.
str
;
// Default value
#if defined(NEW_WAY)
add_option
(
thd
,
create_info
,
"tabname"
,
tab
);
//
add_option(thd, create_info, "tabname", tab);
#endif // NEW_WAY
}
// endif tab
...
...
@@ -4044,8 +4105,8 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
}
// endif src
if
(
ok
)
{
char
*
cnm
,
*
rem
;
int
i
,
len
,
dec
,
typ
,
flg
;
char
*
cnm
,
*
rem
,
*
dft
;
int
i
,
len
,
prec
,
dec
,
typ
,
flg
;
PDBUSER
dup
=
PlgGetUser
(
g
);
PCATLG
cat
=
(
dup
)
?
dup
->
Catalog
:
NULL
;
...
...
@@ -4151,19 +4212,21 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
#if defined(NEW_WAY)
// Now add the field
rc
=
add_fields
(
g
,
thd
,
&
alter_info
,
cnm
,
typ
,
len
,
dec
,
NOT_NULL_FLAG
,
""
,
flg
,
dbf
);
NOT_NULL_FLAG
,
""
,
flg
,
dbf
,
0
);
#else // !NEW_WAY
// Now add the field
if
(
add_field
(
&
sql
,
cnm
,
typ
,
len
,
dec
,
NOT_NULL_FLAG
,
0
,
flg
,
dbf
,
0
))
if
(
add_field
(
&
sql
,
cnm
,
typ
,
len
,
dec
,
NOT_NULL_FLAG
,
0
,
NULL
,
flg
,
dbf
,
0
))
rc
=
HA_ERR_OUT_OF_MEM
;
#endif // !NEW_WAY
}
// endfor crp
}
else
// Not a catalog table
for
(
i
=
0
;
!
rc
&&
i
<
qrp
->
Nblin
;
i
++
)
{
typ
=
len
=
dec
=
0
;
typ
=
len
=
prec
=
dec
=
0
;
tm
=
NOT_NULL_FLAG
;
cnm
=
(
char
*
)
"noname"
;
dft
=
NULL
;
#if defined(NEW_WAY)
rem
=
""
;
// cs= NULL;
...
...
@@ -4181,6 +4244,10 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
v
=
(
crp
->
Nulls
)
?
crp
->
Nulls
[
i
]
:
0
;
break
;
case
FLD_PREC
:
// PREC must be always before LENGTH
len
=
prec
=
crp
->
Kdata
->
GetIntValue
(
i
);
break
;
case
FLD_LENGTH
:
len
=
crp
->
Kdata
->
GetIntValue
(
i
);
break
;
case
FLD_SCALE
:
...
...
@@ -4200,6 +4267,9 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
// cs= get_charset_by_name(csn, 0);
// break;
case
FLD_DEFAULT
:
dft
=
crp
->
Kdata
->
GetCharValue
(
i
);
break
;
default:
break
;
// Ignore
}
// endswitch Fld
...
...
@@ -4209,16 +4279,16 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
int
plgtyp
;
// typ must be PLG type, not SQL type
if
(
!
(
plgtyp
=
TranslateSQLType
(
typ
,
dec
,
len
,
v
)))
{
if
(
!
(
plgtyp
=
TranslateSQLType
(
typ
,
dec
,
prec
,
v
)))
{
sprintf
(
g
->
Message
,
"Unsupported SQL type %d"
,
typ
);
my_message
(
ER_UNKNOWN_ERROR
,
g
->
Message
,
MYF
(
0
));
return
HA_ERR_INTERNAL_ERROR
;
}
else
typ
=
plgtyp
;
// Some data sources do not count dec in length
// Some data sources do not count dec in length
(prec)
if
(
typ
==
TYPE_FLOAT
)
len
+=
(
dec
+
2
);
// To be safe
prec
+=
(
dec
+
2
);
// To be safe
else
dec
=
0
;
...
...
@@ -4227,14 +4297,16 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
// Make the arguments as required by add_fields
if
(
typ
==
TYPE_DATE
)
len
=
0
;
prec
=
0
;
else
if
(
typ
==
TYPE_FLOAT
)
prec
=
len
;
// Now add the field
#if defined(NEW_WAY)
rc
=
add_fields
(
g
,
thd
,
&
alter_info
,
cnm
,
typ
,
len
,
dec
,
tm
,
rem
,
0
,
true
);
rc
=
add_fields
(
g
,
thd
,
&
alter_info
,
cnm
,
typ
,
prec
,
dec
,
tm
,
rem
,
0
,
dbf
,
v
);
#else // !NEW_WAY
if
(
add_field
(
&
sql
,
cnm
,
typ
,
len
,
dec
,
tm
,
rem
,
0
,
dbf
,
v
))
if
(
add_field
(
&
sql
,
cnm
,
typ
,
prec
,
dec
,
tm
,
rem
,
dft
,
0
,
dbf
,
v
))
rc
=
HA_ERR_OUT_OF_MEM
;
#endif // !NEW_WAY
}
// endfor i
...
...
@@ -4553,9 +4625,9 @@ int ha_connect::create(const char *name, TABLE *table_arg,
}
// endfor field
if
(
IsFileType
(
type
))
{
table
=
table_arg
;
// Used by called functions
table
=
table_arg
;
// Used by called functions
if
(
IsFileType
(
type
))
{
if
(
!
options
->
filename
)
{
// The file name is not specified, create a default file in
// the database directory named table_name.table_type.
...
...
@@ -4619,42 +4691,63 @@ int ha_connect::create(const char *name, TABLE *table_arg,
}
// endif filename
// To check whether indexes have to be made or remade
if
(
!
g
->
Xchk
)
{
PIXDEF
xdp
;
}
// endif type
// To check whether indexes have to be made or remade
if
(
!
g
->
Xchk
)
{
PIXDEF
xdp
;
// We should be in CREATE TABLE
if
(
thd_sql_command
(
table
->
in_use
)
!=
SQLCOM_CREATE_TABLE
)
push_warning
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
0
,
"Wrong command in create, please contact CONNECT team"
);
// We should be in CREATE TABLE
if
(
thd_sql_command
(
table
->
in_use
)
!=
SQLCOM_CREATE_TABLE
)
push_warning
(
thd
,
Sql_condition
::
WARN_LEVEL_WARN
,
0
,
"Wrong command in create, please contact CONNECT team"
);
// Get the index definitions
if
(
xdp
=
GetIndexInfo
())
{
// Get the index definitions
if
(
xdp
=
GetIndexInfo
())
{
if
(
IsTypeIndexable
(
type
))
{
PDBUSER
dup
=
PlgGetUser
(
g
);
PCATLG
cat
=
(
dup
)
?
dup
->
Catalog
:
NULL
;
if
(
cat
)
{
cat
->
SetDataPath
(
g
,
table_arg
->
s
->
db
.
str
);
if
((
rc
=
optimize
(
table
->
in_use
,
NULL
)))
{
printf
(
"Create rc=%d %s
\n
"
,
rc
,
g
->
Message
);
my_message
(
ER_UNKNOWN_ERROR
,
g
->
Message
,
MYF
(
0
));
rc
=
HA_ERR_INTERNAL_ERROR
;
}
else
CloseTable
(
g
);
}
// endif cat
}
else
{
sprintf
(
g
->
Message
,
"Table type %s is not indexable"
,
options
->
type
);
my_message
(
ER_UNKNOWN_ERROR
,
g
->
Message
,
MYF
(
0
));
rc
=
HA_ERR_INTERNAL_ERROR
;
}
// endif Indexable
}
// endif xdp
}
// endif xdp
}
else
{
((
PCHK
)
g
->
Xchk
)
->
newsep
=
GetBooleanOption
(
"Sepindex"
,
false
);
((
PCHK
)
g
->
Xchk
)
->
newpix
=
GetIndexInfo
();
}
// endif Xchk
}
else
{
PIXDEF
xdp
=
GetIndexInfo
();
table
=
st
;
}
// endif type
if
(
xdp
)
{
if
(
!
IsTypeIndexable
(
type
))
{
g
->
Xchk
=
NULL
;
sprintf
(
g
->
Message
,
"Table type %s is not indexable"
,
options
->
type
);
my_message
(
ER_UNKNOWN_ERROR
,
g
->
Message
,
MYF
(
0
));
rc
=
HA_ERR_INTERNAL_ERROR
;
}
else
{
((
PCHK
)
g
->
Xchk
)
->
newpix
=
xdp
;
((
PCHK
)
g
->
Xchk
)
->
newsep
=
GetBooleanOption
(
"Sepindex"
,
false
);
}
// endif Indexable
}
else
if
(
!
((
PCHK
)
g
->
Xchk
)
->
oldpix
)
g
->
Xchk
=
NULL
;
}
// endif Xchk
table
=
st
;
DBUG_RETURN
(
rc
);
}
// end of create
...
...
storage/connect/mycat.cc
View file @
4dafdf16
...
...
@@ -172,21 +172,6 @@ bool IsTypeNullable(TABTYPE type)
{
bool
nullable
;
#if 0
switch (type) {
case TAB_ODBC:
case TAB_MYSQL:
case TAB_TBL:
case TAB_INI:
case TAB_XML:
nullable= true;
break;
default:
nullable= false;
break;
} // endswitch type
#endif // 0
switch
(
type
)
{
case
TAB_MAC
:
case
TAB_DIR
:
...
...
@@ -222,6 +207,31 @@ bool IsTypeFixed(TABTYPE type)
return
fix
;
}
// end of IsTypeFixed
/***********************************************************************/
/* Return true for table types with fix length records. */
/***********************************************************************/
bool
IsTypeIndexable
(
TABTYPE
type
)
{
bool
idx
;
switch
(
type
)
{
case
TAB_DOS
:
case
TAB_CSV
:
case
TAB_FMT
:
case
TAB_FIX
:
case
TAB_BIN
:
case
TAB_VEC
:
case
TAB_DBF
:
idx
=
true
;
break
;
default:
idx
=
false
;
break
;
}
// endswitch type
return
idx
;
}
// end of IsTypeIndexable
/***********************************************************************/
/* Get a unique enum catalog function ID. */
/***********************************************************************/
...
...
storage/connect/mycat.h
View file @
4dafdf16
...
...
@@ -38,6 +38,7 @@ TABTYPE GetTypeID(const char *type);
bool
IsFileType
(
TABTYPE
type
);
bool
IsTypeNullable
(
TABTYPE
type
);
bool
IsTypeFixed
(
TABTYPE
type
);
bool
IsTypeIndexable
(
TABTYPE
type
);
uint
GetFuncID
(
const
char
*
func
);
/***********************************************************************/
...
...
storage/connect/myconn.cpp
View file @
4dafdf16
...
...
@@ -46,21 +46,6 @@
#define DLL_EXPORT // Items are exported from this DLL
#include "myconn.h"
#if defined(EMBEDDED)
static
char
*
server_args
[]
=
{
"this_program"
,
/* this string is not used */
"--skip-bdb"
,
"--skip-innodb"
};
static
char
*
server_groups
[]
=
{
"PlugDB_SERVER"
,
"embedded"
,
"server"
,
(
char
*
)
NULL
};
#endif // EMBEDDED
extern
"C"
int
trace
;
extern
MYSQL_PLUGIN_IMPORT
uint
mysqld_port
;
...
...
@@ -82,12 +67,12 @@ PQRYRES MyColumns(PGLOBAL g, const char *host, const char *db,
{
static
int
buftyp
[]
=
{
TYPE_STRING
,
TYPE_SHORT
,
TYPE_STRING
,
TYPE_INT
,
TYPE_STRING
,
TYPE_SHORT
,
TYPE_SHORT
,
TYPE_SHORT
,
TYPE_STRING
,
TYPE_STRING
,
TYPE_STRING
};
TYPE_STRING
,
TYPE_STRING
,
TYPE_STRING
,
TYPE_STRING
};
static
XFLD
fldtyp
[]
=
{
FLD_NAME
,
FLD_TYPE
,
FLD_TYPENAME
,
FLD_PREC
,
FLD_KEY
,
FLD_SCALE
,
FLD_RADIX
,
FLD_NULL
,
FLD_REM
,
FLD_NO
,
FLD_CHARSET
};
static
unsigned
int
length
[]
=
{
0
,
4
,
16
,
4
,
4
,
4
,
4
,
4
,
256
,
32
,
32
};
char
*
fld
,
*
fmt
,
v
,
cmd
[
128
];
FLD_REM
,
FLD_NO
,
FLD_
DEFAULT
,
FLD_
CHARSET
};
static
unsigned
int
length
[]
=
{
0
,
4
,
16
,
4
,
4
,
4
,
4
,
4
,
0
,
32
,
0
,
32
};
char
*
fld
,
*
fmt
,
v
,
cmd
[
128
]
,
uns
[
16
],
zero
[
16
]
;
int
i
,
n
,
nf
,
ncol
=
sizeof
(
buftyp
)
/
sizeof
(
int
);
int
len
,
type
,
prec
,
rc
,
k
=
0
;
PQRYRES
qrp
;
...
...
@@ -122,9 +107,10 @@ PQRYRES MyColumns(PGLOBAL g, const char *host, const char *db,
}
// endif n
/********************************************************************/
/* Get the size of the name
columns.
*/
/* Get the size of the name
and default columns.
*/
/********************************************************************/
length
[
0
]
=
myc
.
GetFieldLength
(
0
);
length
[
10
]
=
myc
.
GetFieldLength
(
5
);
}
else
{
n
=
0
;
length
[
0
]
=
128
;
...
...
@@ -164,18 +150,29 @@ PQRYRES MyColumns(PGLOBAL g, const char *host, const char *db,
crp
=
qrp
->
Colresp
;
// Column_Name
crp
->
Kdata
->
SetValue
(
fld
,
i
);
// Get type, type name,
and precision
// Get type, type name,
precision, unsigned and zerofill
fld
=
myc
.
GetCharField
(
1
);
prec
=
0
;
len
=
0
;
v
=
0
;
if
((
nf
=
sscanf
(
fld
,
"%[^(](%d,%d"
,
cmd
,
&
len
,
&
prec
))
<
1
)
{
sprintf
(
g
->
Message
,
MSG
(
BAD_FIELD_TYPE
),
fld
);
myc
.
Close
();
return
NULL
;
}
else
qrp
->
Nblin
++
;
*
uns
=
0
;
*
zero
=
0
;
switch
((
nf
=
sscanf
(
fld
,
"%[^(](%d,%d"
,
cmd
,
&
len
,
&
prec
)))
{
case
3
:
nf
=
sscanf
(
fld
,
"%[^(](%d,%d) %s %s"
,
cmd
,
&
len
,
&
prec
,
uns
,
zero
);
break
;
case
2
:
nf
=
sscanf
(
fld
,
"%[^(](%d) %s %s"
,
cmd
,
&
len
,
uns
,
zero
)
+
1
;
break
;
case
1
:
nf
=
sscanf
(
fld
,
"%s %s %s"
,
cmd
,
uns
,
zero
)
+
2
;
break
;
default:
sprintf
(
g
->
Message
,
MSG
(
BAD_FIELD_TYPE
),
fld
);
myc
.
Close
();
return
NULL
;
}
// endswitch nf
if
((
type
=
MYSQLtoPLG
(
cmd
,
&
v
))
==
TYPE_ERROR
)
{
sprintf
(
g
->
Message
,
"Unsupported column type %s"
,
cmd
);
...
...
@@ -184,9 +181,16 @@ PQRYRES MyColumns(PGLOBAL g, const char *host, const char *db,
}
else
if
(
type
==
TYPE_STRING
)
len
=
min
(
len
,
4096
);
qrp
->
Nblin
++
;
crp
=
crp
->
Next
;
// Data_Type
crp
->
Kdata
->
SetValue
(
type
,
i
);
crp
->
Nulls
[
i
]
=
v
;
switch
(
nf
)
{
case
5
:
crp
->
Nulls
[
i
]
=
'Z'
;
break
;
case
4
:
crp
->
Nulls
[
i
]
=
'U'
;
break
;
default:
crp
->
Nulls
[
i
]
=
v
;
break
;
}
// endswitch nf
crp
=
crp
->
Next
;
// Type_Name
crp
->
Kdata
->
SetValue
(
cmd
,
i
);
...
...
@@ -200,7 +204,7 @@ PQRYRES MyColumns(PGLOBAL g, const char *host, const char *db,
crp
=
crp
->
Next
;
// Precision
crp
->
Kdata
->
SetValue
(
len
,
i
);
crp
=
crp
->
Next
;
//
was Length
crp
=
crp
->
Next
;
//
key (was Length)
fld
=
myc
.
GetCharField
(
4
);
crp
->
Kdata
->
SetValue
(
fld
,
i
);
...
...
@@ -218,9 +222,13 @@ PQRYRES MyColumns(PGLOBAL g, const char *host, const char *db,
fld
=
myc
.
GetCharField
(
8
);
crp
->
Kdata
->
SetValue
(
fld
,
i
);
crp
=
crp
->
Next
;
//
New
crp
=
crp
->
Next
;
//
Date format
crp
->
Kdata
->
SetValue
((
fmt
)
?
fmt
:
(
char
*
)
""
,
i
);
crp
=
crp
->
Next
;
// New (default)
fld
=
myc
.
GetCharField
(
5
);
crp
->
Kdata
->
SetValue
(
fld
,
i
);
crp
=
crp
->
Next
;
// New (charset)
fld
=
myc
.
GetCharField
(
2
);
crp
->
Kdata
->
SetValue
(
fld
,
i
);
...
...
@@ -657,6 +665,7 @@ PQRYRES MYSQLC::GetResult(PGLOBAL g, bool pdb)
{
char
*
fmt
;
int
n
;
bool
uns
;
PCOLRES
*
pcrp
,
crp
;
PQRYRES
qrp
;
MYSQL_FIELD
*
fld
;
...
...
@@ -707,9 +716,10 @@ PQRYRES MYSQLC::GetResult(PGLOBAL g, bool pdb)
crp
->
Prec
=
(
crp
->
Type
==
TYPE_FLOAT
)
?
fld
->
decimals
:
0
;
crp
->
Length
=
fld
->
max_length
;
crp
->
Clen
=
GetTypeSize
(
crp
->
Type
,
crp
->
Length
);
uns
=
(
fld
->
flags
&
(
UNSIGNED_FLAG
|
ZEROFILL_FLAG
))
?
true
:
false
;
if
(
!
(
crp
->
Kdata
=
AllocValBlock
(
g
,
NULL
,
crp
->
Type
,
m_Rows
,
crp
->
Clen
,
0
,
FALSE
,
TRUE
,
FALSE
)))
{
crp
->
Clen
,
0
,
FALSE
,
TRUE
,
uns
)))
{
sprintf
(
g
->
Message
,
MSG
(
INV_RESULT_TYPE
),
GetFormatType
(
crp
->
Type
));
return
NULL
;
...
...
storage/connect/mysql-test/connect/my.cnf
View file @
4dafdf16
...
...
@@ -13,3 +13,5 @@ MASTER_MYSOCK= @mysqld.1.socket
SLAVE_MYPORT= @mysqld.2.port
SLAVE_MYSOCK= @mysqld.2.socket
PGCLIENTENCODING= UTF8
storage/connect/mysql-test/connect/r/mysql.result
View file @
4dafdf16
...
...
@@ -238,3 +238,38 @@ CREATE TABLE `t2` (
# End of mysqldump ------
DROP TABLE t2;
DROP TABLE t1;
#
# Testing getting unsigned types
#
CREATE TABLE t1 (
a TINYINT UNSIGNED NOT NULL,
b SMALLINT ZEROFILL NOT NULL,
c INT UNSIGNED NOT NULL,
d BIGINT UNSIGNED NOT NULL,
e CHAR(32) NOT NULL DEFAULT 'Hello') ENGINE=CONNECT TABLE_TYPE=FIX;
Warnings:
Warning 1105 No file name. Table will use t1.fix
DESCRIBE t1;
Field Type Null Key Default Extra
a tinyint(3) unsigned NO NULL
b smallint(5) unsigned zerofill NO NULL
c int(10) unsigned NO NULL
d bigint(20) unsigned NO NULL
e char(32) NO Hello
INSERT INTO t1(a,b,c,d) VALUES(255,65535,4294967295,18446744073709551615);
SELECT * FROM t1;
a b c d e
255 65535 4294967295 18446744073709551615 Hello
CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL TABNAME=t1;
DESCRIBE t2;
Field Type Null Key Default Extra
a tinyint(3) unsigned NO NULL
b smallint(5) unsigned zerofill NO NULL
c int(10) unsigned NO NULL
d bigint(20) unsigned NO NULL
e char(32) NO Hello
SELECT * FROM t2;
a b c d e
255 65535 4294967295 18446744073709551615 Hello
DROP TABLE t2;
DROP TABLE t1;
storage/connect/mysql-test/connect/r/mysql_discovery.result
View file @
4dafdf16
...
...
@@ -13,19 +13,13 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`id` int(20) NOT NULL,
`group` int(11) NOT NULL,
`a\\b` int(11) NOT NULL,
`a\\` int(10) DEFAULT NULL,
`name` varchar(32) DEFAULT
NULL
`group` int(11) NOT NULL
DEFAULT '1'
,
`a\\b` int(11) NOT NULL
DEFAULT '2'
,
`a\\` int(10)
unsigned
DEFAULT NULL,
`name` varchar(32) DEFAULT
'name'
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1' `TABLE_TYPE`='MYSQL'
INSERT INTO t1 (id, name) VALUES (1, 'foo');
Warnings:
Warning 1364 Field 'group' doesn't have a default value
Warning 1364 Field 'a\\b' doesn't have a default value
INSERT INTO t1 (id, name) VALUES (2, 'fee');
Warnings:
Warning 1364 Field 'group' doesn't have a default value
Warning 1364 Field 'a\\b' doesn't have a default value
SELECT * FROM t1;
id group a\\b a\\ name
1 1 2 NULL foo
...
...
storage/connect/mysql-test/connect/r/mysql_new.result
View file @
4dafdf16
...
...
@@ -204,7 +204,7 @@ t1 CREATE TABLE `t1` (
`a` date DEFAULT NULL,
`b` datetime DEFAULT NULL,
`c` time DEFAULT NULL,
`d` timestamp NOT NULL DEFAULT
'0000-00-00 00:00:00'
,
`d` timestamp NOT NULL DEFAULT
CURRENT_TIMESTAMP
,
`e` year(4) DEFAULT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT' `TABLE_TYPE`='MYSQL'
SELECT * FROM t1;
...
...
storage/connect/mysql-test/connect/r/odbc.result
0 → 100644
View file @
4dafdf16
SET NAMES utf8;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='Bad connection string';
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Sources;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`Name` varchar(256) NOT NULL,
`Description` varchar(256) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Sources'
DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Drivers;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`Description` char(128) NOT NULL,
`Attributes` varchar(256) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Drivers'
DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Tables CONNECTION='Not important';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`Table_Qualifier` char(128) NOT NULL,
`Table_Owner` char(128) NOT NULL,
`Table_Name` char(128) NOT NULL,
`Table_Type` char(16) NOT NULL,
`Remark` char(128) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='Not important' `TABLE_TYPE`='ODBC' `CATFUNC`='Tables'
DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Columns CONNECTION='Not important';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`Table_Qualif` char(128) NOT NULL,
`Table_Owner` char(128) NOT NULL,
`Table_Name` char(128) NOT NULL,
`Column_Name` char(128) NOT NULL,
`Data_Type` smallint(6) NOT NULL,
`Type_Name` char(20) NOT NULL,
`Precision` int(10) NOT NULL,
`Length` int(10) NOT NULL,
`Scale` smallint(6) NOT NULL,
`Radix` smallint(6) NOT NULL,
`Nullable` smallint(6) NOT NULL,
`Remarks` char(128) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='Not important' `TABLE_TYPE`='ODBC' `CATFUNC`='Columns'
DROP TABLE t1;
storage/connect/mysql-test/connect/r/odbc_postgresql.result
0 → 100644
View file @
4dafdf16
Table Create Table
t1 CREATE TABLE `t1` (
`Name` varchar(256) NOT NULL,
`Description` varchar(256) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Sources'
SET NAMES utf8;
#
# Checking CATFUNC=Tables
#
# All tables in all schemas
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables;
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr public t1 TABLE
mtr public t2 TABLE
mtr public v1 VIEW
mtr schema1 t1 TABLE
mtr schema1 t2 TABLE
mtr schema1 v1 VIEW
DROP TABLE t1;
# All tables in all schemas
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables TABNAME='%.%.%';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr public t1 TABLE
mtr public t2 TABLE
mtr public v1 VIEW
mtr schema1 t1 TABLE
mtr schema1 t2 TABLE
mtr schema1 v1 VIEW
DROP TABLE t1;
# All tables in all schemas
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables TABNAME='%.%';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr public t1 TABLE
mtr public t2 TABLE
mtr public v1 VIEW
mtr schema1 t1 TABLE
mtr schema1 t2 TABLE
mtr schema1 v1 VIEW
DROP TABLE t1;
# All tables in the default schema ("public")
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables TABNAME='%';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr public t1 TABLE
mtr public t2 TABLE
mtr public v1 VIEW
DROP TABLE t1;
# All tables "t1" in all schemas
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables TABNAME='%.%.t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr public t1 TABLE
mtr schema1 t1 TABLE
DROP TABLE t1;
# All tables "t1" in all schemas
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables TABNAME='%.t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr public t1 TABLE
mtr schema1 t1 TABLE
DROP TABLE t1;
# Table "t1" in the default schema ("public")
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables TABNAME='t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr public t1 TABLE
DROP TABLE t1;
# Table "t1" in the schema "public"
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables TABNAME='%.public.t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr public t1 TABLE
DROP TABLE t1;
# Table "t1" in the schema "schema1"
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables TABNAME='%.schema1.t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr schema1 t1 TABLE
DROP TABLE t1;
# All tables "t1" in all schemas (Catalog name is ignored by PostgreSQL)
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Tables TABNAME='xxx.%.t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
mtr public t1 TABLE
mtr schema1 t1 TABLE
DROP TABLE t1;
#
# Checking CATFUNC=Columns
#
# All columns in the schemas "public" and "schema1"
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Columns;
SELECT * FROM t1 WHERE Table_Owner IN ('public','schema1') ORDER BY Table_Owner, Table_Name;
Table_Qualif Table_Owner Table_Name Column_Name Data_Type Type_Name Precision Length Scale Radix Nullable Remarks
mtr public t1 a 4 int4 10 4 0 10 0
mtr public t2 a 4 int4 10 4 0 10 0
mtr public v1 a 4 int4 10 4 0 10 1
mtr schema1 t1 a 1 bpchar 10 60 0 0 0
mtr schema1 t2 a 1 bpchar 10 60 0 0 0
mtr schema1 v1 a 1 bpchar 10 60 0 0 1
DROP TABLE t1;
# All columns in the schemas "public" and "schema1"
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Columns TABNAME='%.%.%';
SELECT * FROM t1 WHERE Table_Owner IN ('public','schema1') ORDER BY Table_Owner, Table_Name;
Table_Qualif Table_Owner Table_Name Column_Name Data_Type Type_Name Precision Length Scale Radix Nullable Remarks
mtr public t1 a 4 int4 10 4 0 10 0
mtr public t2 a 4 int4 10 4 0 10 0
mtr public v1 a 4 int4 10 4 0 10 1
mtr schema1 t1 a 1 bpchar 10 60 0 0 0
mtr schema1 t2 a 1 bpchar 10 60 0 0 0
mtr schema1 v1 a 1 bpchar 10 60 0 0 1
DROP TABLE t1;
# All tables "t1" in all schemas
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Columns TABNAME='%.%.t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualif Table_Owner Table_Name Column_Name Data_Type Type_Name Precision Length Scale Radix Nullable Remarks
mtr public t1 a 4 int4 10 4 0 10 0
mtr schema1 t1 a 1 bpchar 10 60 0 0 0
DROP TABLE t1;
# Table "t1" in the schema "public"
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Columns TABNAME='%.public.t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualif Table_Owner Table_Name Column_Name Data_Type Type_Name Precision Length Scale Radix Nullable Remarks
mtr public t1 a 4 int4 10 4 0 10 0
DROP TABLE t1;
# Table "t1" in the schema "schema1"
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Columns TABNAME='%.schema1.t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualif Table_Owner Table_Name Column_Name Data_Type Type_Name Precision Length Scale Radix Nullable Remarks
mtr schema1 t1 a 1 bpchar 10 60 0 0 0
DROP TABLE t1;
# All tables "t1" in all schemas (Catalog name is ignored by PostgreSQL)
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' CATFUNC=Columns TABNAME='xxx.%.t1';
SELECT * FROM t1 ORDER BY Table_Owner, Table_Name;
Table_Qualif Table_Owner Table_Name Column_Name Data_Type Type_Name Precision Length Scale Radix Nullable Remarks
mtr public t1 a 4 int4 10 4 0 10 0
mtr schema1 t1 a 1 bpchar 10 60 0 0 0
DROP TABLE t1;
#
# Checking tables
#
# Table "t1" in the default schema ("public")
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(10) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC'
SELECT * FROM t1;
a
10
20
30
CREATE TABLE t2 AS SELECT * FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t2;
a
10
20
30
DROP TABLE t2;
CREATE VIEW v1 AS SELECT * FROM t1;
SELECT * FROM v1;
a
10
20
30
DROP VIEW v1;
DROP TABLE t1;
# Table "t1" in the schema "public"
CREATE TABLE t1 ENGINE=CONNECT TABNAME='public.t1' TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(10) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='public.t1'
SELECT * FROM t1;
a
10
20
30
DROP TABLE t1;
# Table "t1" in the schema "schema1"
CREATE TABLE t1 ENGINE=CONNECT TABNAME='schema1.t1' CHARSET=utf8 DATA_CHARSET=utf8 TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` char(10) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=utf8 CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='schema1.t1' `DATA_CHARSET`='utf8'
SELECT * FROM t1;
a
aaa
bbb
ccc
яяя
CREATE TABLE t2 AS SELECT * FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` char(10) CHARACTER SET utf8 NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t2;
a
aaa
bbb
ccc
яяя
DROP TABLE t2;
CREATE VIEW v1 AS SELECT * FROM t1;
SELECT * FROM v1;
a
aaa
bbb
ccc
яяя
DROP VIEW v1;
DROP TABLE t1;
# View "v1" in the schema "schema1"
CREATE TABLE t1 ENGINE=CONNECT TABNAME='schema1.v1' CHARSET=utf8 DATA_CHARSET=utf8 TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` char(10) DEFAULT NULL
) ENGINE=CONNECT DEFAULT CHARSET=utf8 CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='schema1.v1' `DATA_CHARSET`='utf8'
SELECT * FROM t1;
a
aaa
bbb
ccc
яяя
CREATE TABLE t2 AS SELECT * FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` char(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t2;
a
aaa
bbb
ccc
яяя
DROP TABLE t2;
CREATE VIEW v1 AS SELECT * FROM t1;
SELECT * FROM v1;
a
aaa
bbb
ccc
яяя
DROP VIEW v1;
DROP TABLE t1;
# Table "t2" in the schema "schema1"
CREATE TABLE t1 ENGINE=CONNECT TABNAME='schema1.t2' CHARSET=utf8 DATA_CHARSET=utf8 TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` char(10) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=utf8 CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='schema1.t2' `DATA_CHARSET`='utf8'
SELECT * FROM t1;
a
xxx
yyy
zzz
ÄÖÜ
CREATE TABLE t2 AS SELECT * FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` char(10) CHARACTER SET utf8 NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t2;
a
xxx
yyy
zzz
ÄÖÜ
DROP TABLE t2;
CREATE VIEW v1 AS SELECT * FROM t1;
SELECT * FROM v1;
a
xxx
yyy
zzz
ÄÖÜ
DROP VIEW v1;
DROP TABLE t1;
storage/connect/mysql-test/connect/r/odbc_sqlite3.result
View file @
4dafdf16
...
...
@@ -51,3 +51,2413 @@ SELECT * FROM t1;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
t1 TABLE
DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT CATFUNC=Columns TABLE_TYPE=ODBC CONNECTION='Driver=SQLite3 ODBC Driver;Database=MTR_SUITE_DIR/std_data/test.sqlite3;NoWCHAR=yes' CHARSET=utf8 DATA_CHARSET=utf8;
SELECT * FROM t1 ORDER BY Table_name;
Table_Qualif Table_Owner Table_Name Column_Name Data_Type Type_Name Precision Length Scale Radix Nullable Remarks
t000 a 4 INT 9 10 10 0 1
t000 b 4 INT 9 10 10 0 1
t000 c 4 INT 9 10 10 0 1
t000 d 4 INT 9 10 10 0 1
t000 e 4 INT 9 10 10 0 1
t001 a 4 INT 9 10 10 0 1
t001 b 4 INT 9 10 10 0 1
t001 c 4 INT 9 10 10 0 1
t001 d 4 INT 9 10 10 0 1
t001 e 4 INT 9 10 10 0 1
t002 a 4 INT 9 10 10 0 1
t002 b 4 INT 9 10 10 0 1
t002 c 4 INT 9 10 10 0 1
t002 d 4 INT 9 10 10 0 1
t002 e 4 INT 9 10 10 0 1
t003 a 4 INT 9 10 10 0 1
t003 b 4 INT 9 10 10 0 1
t003 c 4 INT 9 10 10 0 1
t003 d 4 INT 9 10 10 0 1
t003 e 4 INT 9 10 10 0 1
t004 a 4 INT 9 10 10 0 1
t004 b 4 INT 9 10 10 0 1
t004 c 4 INT 9 10 10 0 1
t004 d 4 INT 9 10 10 0 1
t004 e 4 INT 9 10 10 0 1
t005 a 4 INT 9 10 10 0 1
t005 b 4 INT 9 10 10 0 1
t005 c 4 INT 9 10 10 0 1
t005 d 4 INT 9 10 10 0 1
t005 e 4 INT 9 10 10 0 1
t006 a 4 INT 9 10 10 0 1
t006 b 4 INT 9 10 10 0 1
t006 c 4 INT 9 10 10 0 1
t006 d 4 INT 9 10 10 0 1
t006 e 4 INT 9 10 10 0 1
t007 a 4 INT 9 10 10 0 1
t007 b 4 INT 9 10 10 0 1
t007 c 4 INT 9 10 10 0 1
t007 d 4 INT 9 10 10 0 1
t007 e 4 INT 9 10 10 0 1
t008 a 4 INT 9 10 10 0 1
t008 b 4 INT 9 10 10 0 1
t008 c 4 INT 9 10 10 0 1
t008 d 4 INT 9 10 10 0 1
t008 e 4 INT 9 10 10 0 1
t009 a 4 INT 9 10 10 0 1
t009 b 4 INT 9 10 10 0 1
t009 c 4 INT 9 10 10 0 1
t009 d 4 INT 9 10 10 0 1
t009 e 4 INT 9 10 10 0 1
t010 a 4 INT 9 10 10 0 1
t010 b 4 INT 9 10 10 0 1
t010 c 4 INT 9 10 10 0 1
t010 d 4 INT 9 10 10 0 1
t010 e 4 INT 9 10 10 0 1
t011 a 4 INT 9 10 10 0 1
t011 b 4 INT 9 10 10 0 1
t011 c 4 INT 9 10 10 0 1
t011 d 4 INT 9 10 10 0 1
t011 e 4 INT 9 10 10 0 1
t012 a 4 INT 9 10 10 0 1
t012 b 4 INT 9 10 10 0 1
t012 c 4 INT 9 10 10 0 1
t012 d 4 INT 9 10 10 0 1
t012 e 4 INT 9 10 10 0 1
t013 a 4 INT 9 10 10 0 1
t013 b 4 INT 9 10 10 0 1
t013 c 4 INT 9 10 10 0 1
t013 d 4 INT 9 10 10 0 1
t013 e 4 INT 9 10 10 0 1
t014 a 4 INT 9 10 10 0 1
t014 b 4 INT 9 10 10 0 1
t014 c 4 INT 9 10 10 0 1
t014 d 4 INT 9 10 10 0 1
t014 e 4 INT 9 10 10 0 1
t015 a 4 INT 9 10 10 0 1
t015 b 4 INT 9 10 10 0 1
t015 c 4 INT 9 10 10 0 1
t015 d 4 INT 9 10 10 0 1
t015 e 4 INT 9 10 10 0 1
t016 a 4 INT 9 10 10 0 1
t016 b 4 INT 9 10 10 0 1
t016 c 4 INT 9 10 10 0 1
t016 d 4 INT 9 10 10 0 1
t016 e 4 INT 9 10 10 0 1
t017 a 4 INT 9 10 10 0 1
t017 b 4 INT 9 10 10 0 1
t017 c 4 INT 9 10 10 0 1
t017 d 4 INT 9 10 10 0 1
t017 e 4 INT 9 10 10 0 1
t018 a 4 INT 9 10 10 0 1
t018 b 4 INT 9 10 10 0 1
t018 c 4 INT 9 10 10 0 1
t018 d 4 INT 9 10 10 0 1
t018 e 4 INT 9 10 10 0 1
t019 a 4 INT 9 10 10 0 1
t019 b 4 INT 9 10 10 0 1
t019 c 4 INT 9 10 10 0 1
t019 d 4 INT 9 10 10 0 1
t019 e 4 INT 9 10 10 0 1
t020 a 4 INT 9 10 10 0 1
t020 b 4 INT 9 10 10 0 1
t020 c 4 INT 9 10 10 0 1
t020 d 4 INT 9 10 10 0 1
t020 e 4 INT 9 10 10 0 1
t021 a 4 INT 9 10 10 0 1
t021 b 4 INT 9 10 10 0 1
t021 c 4 INT 9 10 10 0 1
t021 d 4 INT 9 10 10 0 1
t021 e 4 INT 9 10 10 0 1
t022 a 4 INT 9 10 10 0 1
t022 b 4 INT 9 10 10 0 1
t022 c 4 INT 9 10 10 0 1
t022 d 4 INT 9 10 10 0 1
t022 e 4 INT 9 10 10 0 1
t023 a 4 INT 9 10 10 0 1
t023 b 4 INT 9 10 10 0 1
t023 c 4 INT 9 10 10 0 1
t023 d 4 INT 9 10 10 0 1
t023 e 4 INT 9 10 10 0 1
t024 a 4 INT 9 10 10 0 1
t024 b 4 INT 9 10 10 0 1
t024 c 4 INT 9 10 10 0 1
t024 d 4 INT 9 10 10 0 1
t024 e 4 INT 9 10 10 0 1
t025 a 4 INT 9 10 10 0 1
t025 b 4 INT 9 10 10 0 1
t025 c 4 INT 9 10 10 0 1
t025 d 4 INT 9 10 10 0 1
t025 e 4 INT 9 10 10 0 1
t026 a 4 INT 9 10 10 0 1
t026 b 4 INT 9 10 10 0 1
t026 c 4 INT 9 10 10 0 1
t026 d 4 INT 9 10 10 0 1
t026 e 4 INT 9 10 10 0 1
t027 a 4 INT 9 10 10 0 1
t027 b 4 INT 9 10 10 0 1
t027 c 4 INT 9 10 10 0 1
t027 d 4 INT 9 10 10 0 1
t027 e 4 INT 9 10 10 0 1
t028 a 4 INT 9 10 10 0 1
t028 b 4 INT 9 10 10 0 1
t028 c 4 INT 9 10 10 0 1
t028 d 4 INT 9 10 10 0 1
t028 e 4 INT 9 10 10 0 1
t029 a 4 INT 9 10 10 0 1
t029 b 4 INT 9 10 10 0 1
t029 c 4 INT 9 10 10 0 1
t029 d 4 INT 9 10 10 0 1
t029 e 4 INT 9 10 10 0 1
t030 a 4 INT 9 10 10 0 1
t030 b 4 INT 9 10 10 0 1
t030 c 4 INT 9 10 10 0 1
t030 d 4 INT 9 10 10 0 1
t030 e 4 INT 9 10 10 0 1
t031 a 4 INT 9 10 10 0 1
t031 b 4 INT 9 10 10 0 1
t031 c 4 INT 9 10 10 0 1
t031 d 4 INT 9 10 10 0 1
t031 e 4 INT 9 10 10 0 1
t032 a 4 INT 9 10 10 0 1
t032 b 4 INT 9 10 10 0 1
t032 c 4 INT 9 10 10 0 1
t032 d 4 INT 9 10 10 0 1
t032 e 4 INT 9 10 10 0 1
t033 a 4 INT 9 10 10 0 1
t033 b 4 INT 9 10 10 0 1
t033 c 4 INT 9 10 10 0 1
t033 d 4 INT 9 10 10 0 1
t033 e 4 INT 9 10 10 0 1
t034 a 4 INT 9 10 10 0 1
t034 b 4 INT 9 10 10 0 1
t034 c 4 INT 9 10 10 0 1
t034 d 4 INT 9 10 10 0 1
t034 e 4 INT 9 10 10 0 1
t035 a 4 INT 9 10 10 0 1
t035 b 4 INT 9 10 10 0 1
t035 c 4 INT 9 10 10 0 1
t035 d 4 INT 9 10 10 0 1
t035 e 4 INT 9 10 10 0 1
t036 a 4 INT 9 10 10 0 1
t036 b 4 INT 9 10 10 0 1
t036 c 4 INT 9 10 10 0 1
t036 d 4 INT 9 10 10 0 1
t036 e 4 INT 9 10 10 0 1
t037 a 4 INT 9 10 10 0 1
t037 b 4 INT 9 10 10 0 1
t037 c 4 INT 9 10 10 0 1
t037 d 4 INT 9 10 10 0 1
t037 e 4 INT 9 10 10 0 1
t038 a 4 INT 9 10 10 0 1
t038 b 4 INT 9 10 10 0 1
t038 c 4 INT 9 10 10 0 1
t038 d 4 INT 9 10 10 0 1
t038 e 4 INT 9 10 10 0 1
t039 a 4 INT 9 10 10 0 1
t039 b 4 INT 9 10 10 0 1
t039 c 4 INT 9 10 10 0 1
t039 d 4 INT 9 10 10 0 1
t039 e 4 INT 9 10 10 0 1
t040 a 4 INT 9 10 10 0 1
t040 b 4 INT 9 10 10 0 1
t040 c 4 INT 9 10 10 0 1
t040 d 4 INT 9 10 10 0 1
t040 e 4 INT 9 10 10 0 1
t041 a 4 INT 9 10 10 0 1
t041 b 4 INT 9 10 10 0 1
t041 c 4 INT 9 10 10 0 1
t041 d 4 INT 9 10 10 0 1
t041 e 4 INT 9 10 10 0 1
t042 a 4 INT 9 10 10 0 1
t042 b 4 INT 9 10 10 0 1
t042 c 4 INT 9 10 10 0 1
t042 d 4 INT 9 10 10 0 1
t042 e 4 INT 9 10 10 0 1
t043 a 4 INT 9 10 10 0 1
t043 b 4 INT 9 10 10 0 1
t043 c 4 INT 9 10 10 0 1
t043 d 4 INT 9 10 10 0 1
t043 e 4 INT 9 10 10 0 1
t044 a 4 INT 9 10 10 0 1
t044 b 4 INT 9 10 10 0 1
t044 c 4 INT 9 10 10 0 1
t044 d 4 INT 9 10 10 0 1
t044 e 4 INT 9 10 10 0 1
t045 a 4 INT 9 10 10 0 1
t045 b 4 INT 9 10 10 0 1
t045 c 4 INT 9 10 10 0 1
t045 d 4 INT 9 10 10 0 1
t045 e 4 INT 9 10 10 0 1
t046 a 4 INT 9 10 10 0 1
t046 b 4 INT 9 10 10 0 1
t046 c 4 INT 9 10 10 0 1
t046 d 4 INT 9 10 10 0 1
t046 e 4 INT 9 10 10 0 1
t047 a 4 INT 9 10 10 0 1
t047 b 4 INT 9 10 10 0 1
t047 c 4 INT 9 10 10 0 1
t047 d 4 INT 9 10 10 0 1
t047 e 4 INT 9 10 10 0 1
t048 a 4 INT 9 10 10 0 1
t048 b 4 INT 9 10 10 0 1
t048 c 4 INT 9 10 10 0 1
t048 d 4 INT 9 10 10 0 1
t048 e 4 INT 9 10 10 0 1
t049 a 4 INT 9 10 10 0 1
t049 b 4 INT 9 10 10 0 1
t049 c 4 INT 9 10 10 0 1
t049 d 4 INT 9 10 10 0 1
t049 e 4 INT 9 10 10 0 1
t050 a 4 INT 9 10 10 0 1
t050 b 4 INT 9 10 10 0 1
t050 c 4 INT 9 10 10 0 1
t050 d 4 INT 9 10 10 0 1
t050 e 4 INT 9 10 10 0 1
t051 a 4 INT 9 10 10 0 1
t051 b 4 INT 9 10 10 0 1
t051 c 4 INT 9 10 10 0 1
t051 d 4 INT 9 10 10 0 1
t051 e 4 INT 9 10 10 0 1
t052 a 4 INT 9 10 10 0 1
t052 b 4 INT 9 10 10 0 1
t052 c 4 INT 9 10 10 0 1
t052 d 4 INT 9 10 10 0 1
t052 e 4 INT 9 10 10 0 1
t053 a 4 INT 9 10 10 0 1
t053 b 4 INT 9 10 10 0 1
t053 c 4 INT 9 10 10 0 1
t053 d 4 INT 9 10 10 0 1
t053 e 4 INT 9 10 10 0 1
t054 a 4 INT 9 10 10 0 1
t054 b 4 INT 9 10 10 0 1
t054 c 4 INT 9 10 10 0 1
t054 d 4 INT 9 10 10 0 1
t054 e 4 INT 9 10 10 0 1
t055 a 4 INT 9 10 10 0 1
t055 b 4 INT 9 10 10 0 1
t055 c 4 INT 9 10 10 0 1
t055 d 4 INT 9 10 10 0 1
t055 e 4 INT 9 10 10 0 1
t056 a 4 INT 9 10 10 0 1
t056 b 4 INT 9 10 10 0 1
t056 c 4 INT 9 10 10 0 1
t056 d 4 INT 9 10 10 0 1
t056 e 4 INT 9 10 10 0 1
t057 a 4 INT 9 10 10 0 1
t057 b 4 INT 9 10 10 0 1
t057 c 4 INT 9 10 10 0 1
t057 d 4 INT 9 10 10 0 1
t057 e 4 INT 9 10 10 0 1
t058 a 4 INT 9 10 10 0 1
t058 b 4 INT 9 10 10 0 1
t058 c 4 INT 9 10 10 0 1
t058 d 4 INT 9 10 10 0 1
t058 e 4 INT 9 10 10 0 1
t059 a 4 INT 9 10 10 0 1
t059 b 4 INT 9 10 10 0 1
t059 c 4 INT 9 10 10 0 1
t059 d 4 INT 9 10 10 0 1
t059 e 4 INT 9 10 10 0 1
t060 a 4 INT 9 10 10 0 1
t060 b 4 INT 9 10 10 0 1
t060 c 4 INT 9 10 10 0 1
t060 d 4 INT 9 10 10 0 1
t060 e 4 INT 9 10 10 0 1
t061 a 4 INT 9 10 10 0 1
t061 b 4 INT 9 10 10 0 1
t061 c 4 INT 9 10 10 0 1
t061 d 4 INT 9 10 10 0 1
t061 e 4 INT 9 10 10 0 1
t062 a 4 INT 9 10 10 0 1
t062 b 4 INT 9 10 10 0 1
t062 c 4 INT 9 10 10 0 1
t062 d 4 INT 9 10 10 0 1
t062 e 4 INT 9 10 10 0 1
t063 a 4 INT 9 10 10 0 1
t063 b 4 INT 9 10 10 0 1
t063 c 4 INT 9 10 10 0 1
t063 d 4 INT 9 10 10 0 1
t063 e 4 INT 9 10 10 0 1
t064 a 4 INT 9 10 10 0 1
t064 b 4 INT 9 10 10 0 1
t064 c 4 INT 9 10 10 0 1
t064 d 4 INT 9 10 10 0 1
t064 e 4 INT 9 10 10 0 1
t065 a 4 INT 9 10 10 0 1
t065 b 4 INT 9 10 10 0 1
t065 c 4 INT 9 10 10 0 1
t065 d 4 INT 9 10 10 0 1
t065 e 4 INT 9 10 10 0 1
t066 a 4 INT 9 10 10 0 1
t066 b 4 INT 9 10 10 0 1
t066 c 4 INT 9 10 10 0 1
t066 d 4 INT 9 10 10 0 1
t066 e 4 INT 9 10 10 0 1
t067 a 4 INT 9 10 10 0 1
t067 b 4 INT 9 10 10 0 1
t067 c 4 INT 9 10 10 0 1
t067 d 4 INT 9 10 10 0 1
t067 e 4 INT 9 10 10 0 1
t068 a 4 INT 9 10 10 0 1
t068 b 4 INT 9 10 10 0 1
t068 c 4 INT 9 10 10 0 1
t068 d 4 INT 9 10 10 0 1
t068 e 4 INT 9 10 10 0 1
t069 a 4 INT 9 10 10 0 1
t069 b 4 INT 9 10 10 0 1
t069 c 4 INT 9 10 10 0 1
t069 d 4 INT 9 10 10 0 1
t069 e 4 INT 9 10 10 0 1
t070 a 4 INT 9 10 10 0 1
t070 b 4 INT 9 10 10 0 1
t070 c 4 INT 9 10 10 0 1
t070 d 4 INT 9 10 10 0 1
t070 e 4 INT 9 10 10 0 1
t071 a 4 INT 9 10 10 0 1
t071 b 4 INT 9 10 10 0 1
t071 c 4 INT 9 10 10 0 1
t071 d 4 INT 9 10 10 0 1
t071 e 4 INT 9 10 10 0 1
t072 a 4 INT 9 10 10 0 1
t072 b 4 INT 9 10 10 0 1
t072 c 4 INT 9 10 10 0 1
t072 d 4 INT 9 10 10 0 1
t072 e 4 INT 9 10 10 0 1
t073 a 4 INT 9 10 10 0 1
t073 b 4 INT 9 10 10 0 1
t073 c 4 INT 9 10 10 0 1
t073 d 4 INT 9 10 10 0 1
t073 e 4 INT 9 10 10 0 1
t074 a 4 INT 9 10 10 0 1
t074 b 4 INT 9 10 10 0 1
t074 c 4 INT 9 10 10 0 1
t074 d 4 INT 9 10 10 0 1
t074 e 4 INT 9 10 10 0 1
t075 a 4 INT 9 10 10 0 1
t075 b 4 INT 9 10 10 0 1
t075 c 4 INT 9 10 10 0 1
t075 d 4 INT 9 10 10 0 1
t075 e 4 INT 9 10 10 0 1
t076 a 4 INT 9 10 10 0 1
t076 b 4 INT 9 10 10 0 1
t076 c 4 INT 9 10 10 0 1
t076 d 4 INT 9 10 10 0 1
t076 e 4 INT 9 10 10 0 1
t077 a 4 INT 9 10 10 0 1
t077 b 4 INT 9 10 10 0 1
t077 c 4 INT 9 10 10 0 1
t077 d 4 INT 9 10 10 0 1
t077 e 4 INT 9 10 10 0 1
t078 a 4 INT 9 10 10 0 1
t078 b 4 INT 9 10 10 0 1
t078 c 4 INT 9 10 10 0 1
t078 d 4 INT 9 10 10 0 1
t078 e 4 INT 9 10 10 0 1
t079 a 4 INT 9 10 10 0 1
t079 b 4 INT 9 10 10 0 1
t079 c 4 INT 9 10 10 0 1
t079 d 4 INT 9 10 10 0 1
t079 e 4 INT 9 10 10 0 1
t080 a 4 INT 9 10 10 0 1
t080 b 4 INT 9 10 10 0 1
t080 c 4 INT 9 10 10 0 1
t080 d 4 INT 9 10 10 0 1
t080 e 4 INT 9 10 10 0 1
t081 a 4 INT 9 10 10 0 1
t081 b 4 INT 9 10 10 0 1
t081 c 4 INT 9 10 10 0 1
t081 d 4 INT 9 10 10 0 1
t081 e 4 INT 9 10 10 0 1
t082 a 4 INT 9 10 10 0 1
t082 b 4 INT 9 10 10 0 1
t082 c 4 INT 9 10 10 0 1
t082 d 4 INT 9 10 10 0 1
t082 e 4 INT 9 10 10 0 1
t083 a 4 INT 9 10 10 0 1
t083 b 4 INT 9 10 10 0 1
t083 c 4 INT 9 10 10 0 1
t083 d 4 INT 9 10 10 0 1
t083 e 4 INT 9 10 10 0 1
t084 a 4 INT 9 10 10 0 1
t084 b 4 INT 9 10 10 0 1
t084 c 4 INT 9 10 10 0 1
t084 d 4 INT 9 10 10 0 1
t084 e 4 INT 9 10 10 0 1
t085 a 4 INT 9 10 10 0 1
t085 b 4 INT 9 10 10 0 1
t085 c 4 INT 9 10 10 0 1
t085 d 4 INT 9 10 10 0 1
t085 e 4 INT 9 10 10 0 1
t086 a 4 INT 9 10 10 0 1
t086 b 4 INT 9 10 10 0 1
t086 c 4 INT 9 10 10 0 1
t086 d 4 INT 9 10 10 0 1
t086 e 4 INT 9 10 10 0 1
t087 a 4 INT 9 10 10 0 1
t087 b 4 INT 9 10 10 0 1
t087 c 4 INT 9 10 10 0 1
t087 d 4 INT 9 10 10 0 1
t087 e 4 INT 9 10 10 0 1
t088 a 4 INT 9 10 10 0 1
t088 b 4 INT 9 10 10 0 1
t088 c 4 INT 9 10 10 0 1
t088 d 4 INT 9 10 10 0 1
t088 e 4 INT 9 10 10 0 1
t089 a 4 INT 9 10 10 0 1
t089 b 4 INT 9 10 10 0 1
t089 c 4 INT 9 10 10 0 1
t089 d 4 INT 9 10 10 0 1
t089 e 4 INT 9 10 10 0 1
t090 a 4 INT 9 10 10 0 1
t090 b 4 INT 9 10 10 0 1
t090 c 4 INT 9 10 10 0 1
t090 d 4 INT 9 10 10 0 1
t090 e 4 INT 9 10 10 0 1
t091 a 4 INT 9 10 10 0 1
t091 b 4 INT 9 10 10 0 1
t091 c 4 INT 9 10 10 0 1
t091 d 4 INT 9 10 10 0 1
t091 e 4 INT 9 10 10 0 1
t092 a 4 INT 9 10 10 0 1
t092 b 4 INT 9 10 10 0 1
t092 c 4 INT 9 10 10 0 1
t092 d 4 INT 9 10 10 0 1
t092 e 4 INT 9 10 10 0 1
t093 a 4 INT 9 10 10 0 1
t093 b 4 INT 9 10 10 0 1
t093 c 4 INT 9 10 10 0 1
t093 d 4 INT 9 10 10 0 1
t093 e 4 INT 9 10 10 0 1
t094 a 4 INT 9 10 10 0 1
t094 b 4 INT 9 10 10 0 1
t094 c 4 INT 9 10 10 0 1
t094 d 4 INT 9 10 10 0 1
t094 e 4 INT 9 10 10 0 1
t095 a 4 INT 9 10 10 0 1
t095 b 4 INT 9 10 10 0 1
t095 c 4 INT 9 10 10 0 1
t095 d 4 INT 9 10 10 0 1
t095 e 4 INT 9 10 10 0 1
t096 a 4 INT 9 10 10 0 1
t096 b 4 INT 9 10 10 0 1
t096 c 4 INT 9 10 10 0 1
t096 d 4 INT 9 10 10 0 1
t096 e 4 INT 9 10 10 0 1
t097 a 4 INT 9 10 10 0 1
t097 b 4 INT 9 10 10 0 1
t097 c 4 INT 9 10 10 0 1
t097 d 4 INT 9 10 10 0 1
t097 e 4 INT 9 10 10 0 1
t098 a 4 INT 9 10 10 0 1
t098 b 4 INT 9 10 10 0 1
t098 c 4 INT 9 10 10 0 1
t098 d 4 INT 9 10 10 0 1
t098 e 4 INT 9 10 10 0 1
t099 a 4 INT 9 10 10 0 1
t099 b 4 INT 9 10 10 0 1
t099 c 4 INT 9 10 10 0 1
t099 d 4 INT 9 10 10 0 1
t099 e 4 INT 9 10 10 0 1
t1 a 12 varchar(64) 64 64 10 0 1
t100 a 4 INT 9 10 10 0 1
t100 b 4 INT 9 10 10 0 1
t100 c 4 INT 9 10 10 0 1
t100 d 4 INT 9 10 10 0 1
t100 e 4 INT 9 10 10 0 1
t101 a 4 INT 9 10 10 0 1
t101 b 4 INT 9 10 10 0 1
t101 c 4 INT 9 10 10 0 1
t101 d 4 INT 9 10 10 0 1
t101 e 4 INT 9 10 10 0 1
t102 a 4 INT 9 10 10 0 1
t102 b 4 INT 9 10 10 0 1
t102 c 4 INT 9 10 10 0 1
t102 d 4 INT 9 10 10 0 1
t102 e 4 INT 9 10 10 0 1
t103 a 4 INT 9 10 10 0 1
t103 b 4 INT 9 10 10 0 1
t103 c 4 INT 9 10 10 0 1
t103 d 4 INT 9 10 10 0 1
t103 e 4 INT 9 10 10 0 1
t104 a 4 INT 9 10 10 0 1
t104 b 4 INT 9 10 10 0 1
t104 c 4 INT 9 10 10 0 1
t104 d 4 INT 9 10 10 0 1
t104 e 4 INT 9 10 10 0 1
t105 a 4 INT 9 10 10 0 1
t105 b 4 INT 9 10 10 0 1
t105 c 4 INT 9 10 10 0 1
t105 d 4 INT 9 10 10 0 1
t105 e 4 INT 9 10 10 0 1
t106 a 4 INT 9 10 10 0 1
t106 b 4 INT 9 10 10 0 1
t106 c 4 INT 9 10 10 0 1
t106 d 4 INT 9 10 10 0 1
t106 e 4 INT 9 10 10 0 1
t107 a 4 INT 9 10 10 0 1
t107 b 4 INT 9 10 10 0 1
t107 c 4 INT 9 10 10 0 1
t107 d 4 INT 9 10 10 0 1
t107 e 4 INT 9 10 10 0 1
t108 a 4 INT 9 10 10 0 1
t108 b 4 INT 9 10 10 0 1
t108 c 4 INT 9 10 10 0 1
t108 d 4 INT 9 10 10 0 1
t108 e 4 INT 9 10 10 0 1
t109 a 4 INT 9 10 10 0 1
t109 b 4 INT 9 10 10 0 1
t109 c 4 INT 9 10 10 0 1
t109 d 4 INT 9 10 10 0 1
t109 e 4 INT 9 10 10 0 1
t110 a 4 INT 9 10 10 0 1
t110 b 4 INT 9 10 10 0 1
t110 c 4 INT 9 10 10 0 1
t110 d 4 INT 9 10 10 0 1
t110 e 4 INT 9 10 10 0 1
t111 a 4 INT 9 10 10 0 1
t111 b 4 INT 9 10 10 0 1
t111 c 4 INT 9 10 10 0 1
t111 d 4 INT 9 10 10 0 1
t111 e 4 INT 9 10 10 0 1
t112 a 4 INT 9 10 10 0 1
t112 b 4 INT 9 10 10 0 1
t112 c 4 INT 9 10 10 0 1
t112 d 4 INT 9 10 10 0 1
t112 e 4 INT 9 10 10 0 1
t113 a 4 INT 9 10 10 0 1
t113 b 4 INT 9 10 10 0 1
t113 c 4 INT 9 10 10 0 1
t113 d 4 INT 9 10 10 0 1
t113 e 4 INT 9 10 10 0 1
t114 a 4 INT 9 10 10 0 1
t114 b 4 INT 9 10 10 0 1
t114 c 4 INT 9 10 10 0 1
t114 d 4 INT 9 10 10 0 1
t114 e 4 INT 9 10 10 0 1
t115 a 4 INT 9 10 10 0 1
t115 b 4 INT 9 10 10 0 1
t115 c 4 INT 9 10 10 0 1
t115 d 4 INT 9 10 10 0 1
t115 e 4 INT 9 10 10 0 1
t116 a 4 INT 9 10 10 0 1
t116 b 4 INT 9 10 10 0 1
t116 c 4 INT 9 10 10 0 1
t116 d 4 INT 9 10 10 0 1
t116 e 4 INT 9 10 10 0 1
t117 a 4 INT 9 10 10 0 1
t117 b 4 INT 9 10 10 0 1
t117 c 4 INT 9 10 10 0 1
t117 d 4 INT 9 10 10 0 1
t117 e 4 INT 9 10 10 0 1
t118 a 4 INT 9 10 10 0 1
t118 b 4 INT 9 10 10 0 1
t118 c 4 INT 9 10 10 0 1
t118 d 4 INT 9 10 10 0 1
t118 e 4 INT 9 10 10 0 1
t119 a 4 INT 9 10 10 0 1
t119 b 4 INT 9 10 10 0 1
t119 c 4 INT 9 10 10 0 1
t119 d 4 INT 9 10 10 0 1
t119 e 4 INT 9 10 10 0 1
t120 a 4 INT 9 10 10 0 1
t120 b 4 INT 9 10 10 0 1
t120 c 4 INT 9 10 10 0 1
t120 d 4 INT 9 10 10 0 1
t120 e 4 INT 9 10 10 0 1
t121 a 4 INT 9 10 10 0 1
t121 b 4 INT 9 10 10 0 1
t121 c 4 INT 9 10 10 0 1
t121 d 4 INT 9 10 10 0 1
t121 e 4 INT 9 10 10 0 1
t122 a 4 INT 9 10 10 0 1
t122 b 4 INT 9 10 10 0 1
t122 c 4 INT 9 10 10 0 1
t122 d 4 INT 9 10 10 0 1
t122 e 4 INT 9 10 10 0 1
t123 a 4 INT 9 10 10 0 1
t123 b 4 INT 9 10 10 0 1
t123 c 4 INT 9 10 10 0 1
t123 d 4 INT 9 10 10 0 1
t123 e 4 INT 9 10 10 0 1
t124 a 4 INT 9 10 10 0 1
t124 b 4 INT 9 10 10 0 1
t124 c 4 INT 9 10 10 0 1
t124 d 4 INT 9 10 10 0 1
t124 e 4 INT 9 10 10 0 1
t125 a 4 INT 9 10 10 0 1
t125 b 4 INT 9 10 10 0 1
t125 c 4 INT 9 10 10 0 1
t125 d 4 INT 9 10 10 0 1
t125 e 4 INT 9 10 10 0 1
t126 a 4 INT 9 10 10 0 1
t126 b 4 INT 9 10 10 0 1
t126 c 4 INT 9 10 10 0 1
t126 d 4 INT 9 10 10 0 1
t126 e 4 INT 9 10 10 0 1
t127 a 4 INT 9 10 10 0 1
t127 b 4 INT 9 10 10 0 1
t127 c 4 INT 9 10 10 0 1
t127 d 4 INT 9 10 10 0 1
t127 e 4 INT 9 10 10 0 1
t128 a 4 INT 9 10 10 0 1
t128 b 4 INT 9 10 10 0 1
t128 c 4 INT 9 10 10 0 1
t128 d 4 INT 9 10 10 0 1
t128 e 4 INT 9 10 10 0 1
t129 a 4 INT 9 10 10 0 1
t129 b 4 INT 9 10 10 0 1
t129 c 4 INT 9 10 10 0 1
t129 d 4 INT 9 10 10 0 1
t129 e 4 INT 9 10 10 0 1
t130 a 4 INT 9 10 10 0 1
t130 b 4 INT 9 10 10 0 1
t130 c 4 INT 9 10 10 0 1
t130 d 4 INT 9 10 10 0 1
t130 e 4 INT 9 10 10 0 1
t131 a 4 INT 9 10 10 0 1
t131 b 4 INT 9 10 10 0 1
t131 c 4 INT 9 10 10 0 1
t131 d 4 INT 9 10 10 0 1
t131 e 4 INT 9 10 10 0 1
t132 a 4 INT 9 10 10 0 1
t132 b 4 INT 9 10 10 0 1
t132 c 4 INT 9 10 10 0 1
t132 d 4 INT 9 10 10 0 1
t132 e 4 INT 9 10 10 0 1
t133 a 4 INT 9 10 10 0 1
t133 b 4 INT 9 10 10 0 1
t133 c 4 INT 9 10 10 0 1
t133 d 4 INT 9 10 10 0 1
t133 e 4 INT 9 10 10 0 1
t134 a 4 INT 9 10 10 0 1
t134 b 4 INT 9 10 10 0 1
t134 c 4 INT 9 10 10 0 1
t134 d 4 INT 9 10 10 0 1
t134 e 4 INT 9 10 10 0 1
t135 a 4 INT 9 10 10 0 1
t135 b 4 INT 9 10 10 0 1
t135 c 4 INT 9 10 10 0 1
t135 d 4 INT 9 10 10 0 1
t135 e 4 INT 9 10 10 0 1
t136 a 4 INT 9 10 10 0 1
t136 b 4 INT 9 10 10 0 1
t136 c 4 INT 9 10 10 0 1
t136 d 4 INT 9 10 10 0 1
t136 e 4 INT 9 10 10 0 1
t137 a 4 INT 9 10 10 0 1
t137 b 4 INT 9 10 10 0 1
t137 c 4 INT 9 10 10 0 1
t137 d 4 INT 9 10 10 0 1
t137 e 4 INT 9 10 10 0 1
t138 a 4 INT 9 10 10 0 1
t138 b 4 INT 9 10 10 0 1
t138 c 4 INT 9 10 10 0 1
t138 d 4 INT 9 10 10 0 1
t138 e 4 INT 9 10 10 0 1
t139 a 4 INT 9 10 10 0 1
t139 b 4 INT 9 10 10 0 1
t139 c 4 INT 9 10 10 0 1
t139 d 4 INT 9 10 10 0 1
t139 e 4 INT 9 10 10 0 1
t140 a 4 INT 9 10 10 0 1
t140 b 4 INT 9 10 10 0 1
t140 c 4 INT 9 10 10 0 1
t140 d 4 INT 9 10 10 0 1
t140 e 4 INT 9 10 10 0 1
t141 a 4 INT 9 10 10 0 1
t141 b 4 INT 9 10 10 0 1
t141 c 4 INT 9 10 10 0 1
t141 d 4 INT 9 10 10 0 1
t141 e 4 INT 9 10 10 0 1
t142 a 4 INT 9 10 10 0 1
t142 b 4 INT 9 10 10 0 1
t142 c 4 INT 9 10 10 0 1
t142 d 4 INT 9 10 10 0 1
t142 e 4 INT 9 10 10 0 1
t143 a 4 INT 9 10 10 0 1
t143 b 4 INT 9 10 10 0 1
t143 c 4 INT 9 10 10 0 1
t143 d 4 INT 9 10 10 0 1
t143 e 4 INT 9 10 10 0 1
t144 a 4 INT 9 10 10 0 1
t144 b 4 INT 9 10 10 0 1
t144 c 4 INT 9 10 10 0 1
t144 d 4 INT 9 10 10 0 1
t144 e 4 INT 9 10 10 0 1
t145 a 4 INT 9 10 10 0 1
t145 b 4 INT 9 10 10 0 1
t145 c 4 INT 9 10 10 0 1
t145 d 4 INT 9 10 10 0 1
t145 e 4 INT 9 10 10 0 1
t146 a 4 INT 9 10 10 0 1
t146 b 4 INT 9 10 10 0 1
t146 c 4 INT 9 10 10 0 1
t146 d 4 INT 9 10 10 0 1
t146 e 4 INT 9 10 10 0 1
t147 a 4 INT 9 10 10 0 1
t147 b 4 INT 9 10 10 0 1
t147 c 4 INT 9 10 10 0 1
t147 d 4 INT 9 10 10 0 1
t147 e 4 INT 9 10 10 0 1
t148 a 4 INT 9 10 10 0 1
t148 b 4 INT 9 10 10 0 1
t148 c 4 INT 9 10 10 0 1
t148 d 4 INT 9 10 10 0 1
t148 e 4 INT 9 10 10 0 1
t149 a 4 INT 9 10 10 0 1
t149 b 4 INT 9 10 10 0 1
t149 c 4 INT 9 10 10 0 1
t149 d 4 INT 9 10 10 0 1
t149 e 4 INT 9 10 10 0 1
t150 a 4 INT 9 10 10 0 1
t150 b 4 INT 9 10 10 0 1
t150 c 4 INT 9 10 10 0 1
t150 d 4 INT 9 10 10 0 1
t150 e 4 INT 9 10 10 0 1
t151 a 4 INT 9 10 10 0 1
t151 b 4 INT 9 10 10 0 1
t151 c 4 INT 9 10 10 0 1
t151 d 4 INT 9 10 10 0 1
t151 e 4 INT 9 10 10 0 1
t152 a 4 INT 9 10 10 0 1
t152 b 4 INT 9 10 10 0 1
t152 c 4 INT 9 10 10 0 1
t152 d 4 INT 9 10 10 0 1
t152 e 4 INT 9 10 10 0 1
t153 a 4 INT 9 10 10 0 1
t153 b 4 INT 9 10 10 0 1
t153 c 4 INT 9 10 10 0 1
t153 d 4 INT 9 10 10 0 1
t153 e 4 INT 9 10 10 0 1
t154 a 4 INT 9 10 10 0 1
t154 b 4 INT 9 10 10 0 1
t154 c 4 INT 9 10 10 0 1
t154 d 4 INT 9 10 10 0 1
t154 e 4 INT 9 10 10 0 1
t155 a 4 INT 9 10 10 0 1
t155 b 4 INT 9 10 10 0 1
t155 c 4 INT 9 10 10 0 1
t155 d 4 INT 9 10 10 0 1
t155 e 4 INT 9 10 10 0 1
t156 a 4 INT 9 10 10 0 1
t156 b 4 INT 9 10 10 0 1
t156 c 4 INT 9 10 10 0 1
t156 d 4 INT 9 10 10 0 1
t156 e 4 INT 9 10 10 0 1
t157 a 4 INT 9 10 10 0 1
t157 b 4 INT 9 10 10 0 1
t157 c 4 INT 9 10 10 0 1
t157 d 4 INT 9 10 10 0 1
t157 e 4 INT 9 10 10 0 1
t158 a 4 INT 9 10 10 0 1
t158 b 4 INT 9 10 10 0 1
t158 c 4 INT 9 10 10 0 1
t158 d 4 INT 9 10 10 0 1
t158 e 4 INT 9 10 10 0 1
t159 a 4 INT 9 10 10 0 1
t159 b 4 INT 9 10 10 0 1
t159 c 4 INT 9 10 10 0 1
t159 d 4 INT 9 10 10 0 1
t159 e 4 INT 9 10 10 0 1
t160 a 4 INT 9 10 10 0 1
t160 b 4 INT 9 10 10 0 1
t160 c 4 INT 9 10 10 0 1
t160 d 4 INT 9 10 10 0 1
t160 e 4 INT 9 10 10 0 1
t161 a 4 INT 9 10 10 0 1
t161 b 4 INT 9 10 10 0 1
t161 c 4 INT 9 10 10 0 1
t161 d 4 INT 9 10 10 0 1
t161 e 4 INT 9 10 10 0 1
t162 a 4 INT 9 10 10 0 1
t162 b 4 INT 9 10 10 0 1
t162 c 4 INT 9 10 10 0 1
t162 d 4 INT 9 10 10 0 1
t162 e 4 INT 9 10 10 0 1
t163 a 4 INT 9 10 10 0 1
t163 b 4 INT 9 10 10 0 1
t163 c 4 INT 9 10 10 0 1
t163 d 4 INT 9 10 10 0 1
t163 e 4 INT 9 10 10 0 1
t164 a 4 INT 9 10 10 0 1
t164 b 4 INT 9 10 10 0 1
t164 c 4 INT 9 10 10 0 1
t164 d 4 INT 9 10 10 0 1
t164 e 4 INT 9 10 10 0 1
t165 a 4 INT 9 10 10 0 1
t165 b 4 INT 9 10 10 0 1
t165 c 4 INT 9 10 10 0 1
t165 d 4 INT 9 10 10 0 1
t165 e 4 INT 9 10 10 0 1
t166 a 4 INT 9 10 10 0 1
t166 b 4 INT 9 10 10 0 1
t166 c 4 INT 9 10 10 0 1
t166 d 4 INT 9 10 10 0 1
t166 e 4 INT 9 10 10 0 1
t167 a 4 INT 9 10 10 0 1
t167 b 4 INT 9 10 10 0 1
t167 c 4 INT 9 10 10 0 1
t167 d 4 INT 9 10 10 0 1
t167 e 4 INT 9 10 10 0 1
t168 a 4 INT 9 10 10 0 1
t168 b 4 INT 9 10 10 0 1
t168 c 4 INT 9 10 10 0 1
t168 d 4 INT 9 10 10 0 1
t168 e 4 INT 9 10 10 0 1
t169 a 4 INT 9 10 10 0 1
t169 b 4 INT 9 10 10 0 1
t169 c 4 INT 9 10 10 0 1
t169 d 4 INT 9 10 10 0 1
t169 e 4 INT 9 10 10 0 1
t170 a 4 INT 9 10 10 0 1
t170 b 4 INT 9 10 10 0 1
t170 c 4 INT 9 10 10 0 1
t170 d 4 INT 9 10 10 0 1
t170 e 4 INT 9 10 10 0 1
t171 a 4 INT 9 10 10 0 1
t171 b 4 INT 9 10 10 0 1
t171 c 4 INT 9 10 10 0 1
t171 d 4 INT 9 10 10 0 1
t171 e 4 INT 9 10 10 0 1
t172 a 4 INT 9 10 10 0 1
t172 b 4 INT 9 10 10 0 1
t172 c 4 INT 9 10 10 0 1
t172 d 4 INT 9 10 10 0 1
t172 e 4 INT 9 10 10 0 1
t173 a 4 INT 9 10 10 0 1
t173 b 4 INT 9 10 10 0 1
t173 c 4 INT 9 10 10 0 1
t173 d 4 INT 9 10 10 0 1
t173 e 4 INT 9 10 10 0 1
t174 a 4 INT 9 10 10 0 1
t174 b 4 INT 9 10 10 0 1
t174 c 4 INT 9 10 10 0 1
t174 d 4 INT 9 10 10 0 1
t174 e 4 INT 9 10 10 0 1
t175 a 4 INT 9 10 10 0 1
t175 b 4 INT 9 10 10 0 1
t175 c 4 INT 9 10 10 0 1
t175 d 4 INT 9 10 10 0 1
t175 e 4 INT 9 10 10 0 1
t176 a 4 INT 9 10 10 0 1
t176 b 4 INT 9 10 10 0 1
t176 c 4 INT 9 10 10 0 1
t176 d 4 INT 9 10 10 0 1
t176 e 4 INT 9 10 10 0 1
t177 a 4 INT 9 10 10 0 1
t177 b 4 INT 9 10 10 0 1
t177 c 4 INT 9 10 10 0 1
t177 d 4 INT 9 10 10 0 1
t177 e 4 INT 9 10 10 0 1
t178 a 4 INT 9 10 10 0 1
t178 b 4 INT 9 10 10 0 1
t178 c 4 INT 9 10 10 0 1
t178 d 4 INT 9 10 10 0 1
t178 e 4 INT 9 10 10 0 1
t179 a 4 INT 9 10 10 0 1
t179 b 4 INT 9 10 10 0 1
t179 c 4 INT 9 10 10 0 1
t179 d 4 INT 9 10 10 0 1
t179 e 4 INT 9 10 10 0 1
t180 a 4 INT 9 10 10 0 1
t180 b 4 INT 9 10 10 0 1
t180 c 4 INT 9 10 10 0 1
t180 d 4 INT 9 10 10 0 1
t180 e 4 INT 9 10 10 0 1
t181 a 4 INT 9 10 10 0 1
t181 b 4 INT 9 10 10 0 1
t181 c 4 INT 9 10 10 0 1
t181 d 4 INT 9 10 10 0 1
t181 e 4 INT 9 10 10 0 1
t182 a 4 INT 9 10 10 0 1
t182 b 4 INT 9 10 10 0 1
t182 c 4 INT 9 10 10 0 1
t182 d 4 INT 9 10 10 0 1
t182 e 4 INT 9 10 10 0 1
t183 a 4 INT 9 10 10 0 1
t183 b 4 INT 9 10 10 0 1
t183 c 4 INT 9 10 10 0 1
t183 d 4 INT 9 10 10 0 1
t183 e 4 INT 9 10 10 0 1
t184 a 4 INT 9 10 10 0 1
t184 b 4 INT 9 10 10 0 1
t184 c 4 INT 9 10 10 0 1
t184 d 4 INT 9 10 10 0 1
t184 e 4 INT 9 10 10 0 1
t185 a 4 INT 9 10 10 0 1
t185 b 4 INT 9 10 10 0 1
t185 c 4 INT 9 10 10 0 1
t185 d 4 INT 9 10 10 0 1
t185 e 4 INT 9 10 10 0 1
t186 a 4 INT 9 10 10 0 1
t186 b 4 INT 9 10 10 0 1
t186 c 4 INT 9 10 10 0 1
t186 d 4 INT 9 10 10 0 1
t186 e 4 INT 9 10 10 0 1
t187 a 4 INT 9 10 10 0 1
t187 b 4 INT 9 10 10 0 1
t187 c 4 INT 9 10 10 0 1
t187 d 4 INT 9 10 10 0 1
t187 e 4 INT 9 10 10 0 1
t188 a 4 INT 9 10 10 0 1
t188 b 4 INT 9 10 10 0 1
t188 c 4 INT 9 10 10 0 1
t188 d 4 INT 9 10 10 0 1
t188 e 4 INT 9 10 10 0 1
t189 a 4 INT 9 10 10 0 1
t189 b 4 INT 9 10 10 0 1
t189 c 4 INT 9 10 10 0 1
t189 d 4 INT 9 10 10 0 1
t189 e 4 INT 9 10 10 0 1
t190 a 4 INT 9 10 10 0 1
t190 b 4 INT 9 10 10 0 1
t190 c 4 INT 9 10 10 0 1
t190 d 4 INT 9 10 10 0 1
t190 e 4 INT 9 10 10 0 1
t191 a 4 INT 9 10 10 0 1
t191 b 4 INT 9 10 10 0 1
t191 c 4 INT 9 10 10 0 1
t191 d 4 INT 9 10 10 0 1
t191 e 4 INT 9 10 10 0 1
t192 a 4 INT 9 10 10 0 1
t192 b 4 INT 9 10 10 0 1
t192 c 4 INT 9 10 10 0 1
t192 d 4 INT 9 10 10 0 1
t192 e 4 INT 9 10 10 0 1
t193 a 4 INT 9 10 10 0 1
t193 b 4 INT 9 10 10 0 1
t193 c 4 INT 9 10 10 0 1
t193 d 4 INT 9 10 10 0 1
t193 e 4 INT 9 10 10 0 1
t194 a 4 INT 9 10 10 0 1
t194 b 4 INT 9 10 10 0 1
t194 c 4 INT 9 10 10 0 1
t194 d 4 INT 9 10 10 0 1
t194 e 4 INT 9 10 10 0 1
t195 a 4 INT 9 10 10 0 1
t195 b 4 INT 9 10 10 0 1
t195 c 4 INT 9 10 10 0 1
t195 d 4 INT 9 10 10 0 1
t195 e 4 INT 9 10 10 0 1
t196 a 4 INT 9 10 10 0 1
t196 b 4 INT 9 10 10 0 1
t196 c 4 INT 9 10 10 0 1
t196 d 4 INT 9 10 10 0 1
t196 e 4 INT 9 10 10 0 1
t197 a 4 INT 9 10 10 0 1
t197 b 4 INT 9 10 10 0 1
t197 c 4 INT 9 10 10 0 1
t197 d 4 INT 9 10 10 0 1
t197 e 4 INT 9 10 10 0 1
t198 a 4 INT 9 10 10 0 1
t198 b 4 INT 9 10 10 0 1
t198 c 4 INT 9 10 10 0 1
t198 d 4 INT 9 10 10 0 1
t198 e 4 INT 9 10 10 0 1
t199 a 4 INT 9 10 10 0 1
t199 b 4 INT 9 10 10 0 1
t199 c 4 INT 9 10 10 0 1
t199 d 4 INT 9 10 10 0 1
t199 e 4 INT 9 10 10 0 1
t200 a 4 INT 9 10 10 0 1
t200 b 4 INT 9 10 10 0 1
t200 c 4 INT 9 10 10 0 1
t200 d 4 INT 9 10 10 0 1
t200 e 4 INT 9 10 10 0 1
t201 a 4 INT 9 10 10 0 1
t201 b 4 INT 9 10 10 0 1
t201 c 4 INT 9 10 10 0 1
t201 d 4 INT 9 10 10 0 1
t201 e 4 INT 9 10 10 0 1
t202 a 4 INT 9 10 10 0 1
t202 b 4 INT 9 10 10 0 1
t202 c 4 INT 9 10 10 0 1
t202 d 4 INT 9 10 10 0 1
t202 e 4 INT 9 10 10 0 1
t203 a 4 INT 9 10 10 0 1
t203 b 4 INT 9 10 10 0 1
t203 c 4 INT 9 10 10 0 1
t203 d 4 INT 9 10 10 0 1
t203 e 4 INT 9 10 10 0 1
t204 a 4 INT 9 10 10 0 1
t204 b 4 INT 9 10 10 0 1
t204 c 4 INT 9 10 10 0 1
t204 d 4 INT 9 10 10 0 1
t204 e 4 INT 9 10 10 0 1
t205 a 4 INT 9 10 10 0 1
t205 b 4 INT 9 10 10 0 1
t205 c 4 INT 9 10 10 0 1
t205 d 4 INT 9 10 10 0 1
t205 e 4 INT 9 10 10 0 1
t206 a 4 INT 9 10 10 0 1
t206 b 4 INT 9 10 10 0 1
t206 c 4 INT 9 10 10 0 1
t206 d 4 INT 9 10 10 0 1
t206 e 4 INT 9 10 10 0 1
t207 a 4 INT 9 10 10 0 1
t207 b 4 INT 9 10 10 0 1
t207 c 4 INT 9 10 10 0 1
t207 d 4 INT 9 10 10 0 1
t207 e 4 INT 9 10 10 0 1
t208 a 4 INT 9 10 10 0 1
t208 b 4 INT 9 10 10 0 1
t208 c 4 INT 9 10 10 0 1
t208 d 4 INT 9 10 10 0 1
t208 e 4 INT 9 10 10 0 1
t209 a 4 INT 9 10 10 0 1
t209 b 4 INT 9 10 10 0 1
t209 c 4 INT 9 10 10 0 1
t209 d 4 INT 9 10 10 0 1
t209 e 4 INT 9 10 10 0 1
t210 a 4 INT 9 10 10 0 1
t210 b 4 INT 9 10 10 0 1
t210 c 4 INT 9 10 10 0 1
t210 d 4 INT 9 10 10 0 1
t210 e 4 INT 9 10 10 0 1
t211 a 4 INT 9 10 10 0 1
t211 b 4 INT 9 10 10 0 1
t211 c 4 INT 9 10 10 0 1
t211 d 4 INT 9 10 10 0 1
t211 e 4 INT 9 10 10 0 1
t212 a 4 INT 9 10 10 0 1
t212 b 4 INT 9 10 10 0 1
t212 c 4 INT 9 10 10 0 1
t212 d 4 INT 9 10 10 0 1
t212 e 4 INT 9 10 10 0 1
t213 a 4 INT 9 10 10 0 1
t213 b 4 INT 9 10 10 0 1
t213 c 4 INT 9 10 10 0 1
t213 d 4 INT 9 10 10 0 1
t213 e 4 INT 9 10 10 0 1
t214 a 4 INT 9 10 10 0 1
t214 b 4 INT 9 10 10 0 1
t214 c 4 INT 9 10 10 0 1
t214 d 4 INT 9 10 10 0 1
t214 e 4 INT 9 10 10 0 1
t215 a 4 INT 9 10 10 0 1
t215 b 4 INT 9 10 10 0 1
t215 c 4 INT 9 10 10 0 1
t215 d 4 INT 9 10 10 0 1
t215 e 4 INT 9 10 10 0 1
t216 a 4 INT 9 10 10 0 1
t216 b 4 INT 9 10 10 0 1
t216 c 4 INT 9 10 10 0 1
t216 d 4 INT 9 10 10 0 1
t216 e 4 INT 9 10 10 0 1
t217 a 4 INT 9 10 10 0 1
t217 b 4 INT 9 10 10 0 1
t217 c 4 INT 9 10 10 0 1
t217 d 4 INT 9 10 10 0 1
t217 e 4 INT 9 10 10 0 1
t218 a 4 INT 9 10 10 0 1
t218 b 4 INT 9 10 10 0 1
t218 c 4 INT 9 10 10 0 1
t218 d 4 INT 9 10 10 0 1
t218 e 4 INT 9 10 10 0 1
t219 a 4 INT 9 10 10 0 1
t219 b 4 INT 9 10 10 0 1
t219 c 4 INT 9 10 10 0 1
t219 d 4 INT 9 10 10 0 1
t219 e 4 INT 9 10 10 0 1
t220 a 4 INT 9 10 10 0 1
t220 b 4 INT 9 10 10 0 1
t220 c 4 INT 9 10 10 0 1
t220 d 4 INT 9 10 10 0 1
t220 e 4 INT 9 10 10 0 1
t221 a 4 INT 9 10 10 0 1
t221 b 4 INT 9 10 10 0 1
t221 c 4 INT 9 10 10 0 1
t221 d 4 INT 9 10 10 0 1
t221 e 4 INT 9 10 10 0 1
t222 a 4 INT 9 10 10 0 1
t222 b 4 INT 9 10 10 0 1
t222 c 4 INT 9 10 10 0 1
t222 d 4 INT 9 10 10 0 1
t222 e 4 INT 9 10 10 0 1
t223 a 4 INT 9 10 10 0 1
t223 b 4 INT 9 10 10 0 1
t223 c 4 INT 9 10 10 0 1
t223 d 4 INT 9 10 10 0 1
t223 e 4 INT 9 10 10 0 1
t224 a 4 INT 9 10 10 0 1
t224 b 4 INT 9 10 10 0 1
t224 c 4 INT 9 10 10 0 1
t224 d 4 INT 9 10 10 0 1
t224 e 4 INT 9 10 10 0 1
t225 a 4 INT 9 10 10 0 1
t225 b 4 INT 9 10 10 0 1
t225 c 4 INT 9 10 10 0 1
t225 d 4 INT 9 10 10 0 1
t225 e 4 INT 9 10 10 0 1
t226 a 4 INT 9 10 10 0 1
t226 b 4 INT 9 10 10 0 1
t226 c 4 INT 9 10 10 0 1
t226 d 4 INT 9 10 10 0 1
t226 e 4 INT 9 10 10 0 1
t227 a 4 INT 9 10 10 0 1
t227 b 4 INT 9 10 10 0 1
t227 c 4 INT 9 10 10 0 1
t227 d 4 INT 9 10 10 0 1
t227 e 4 INT 9 10 10 0 1
t228 a 4 INT 9 10 10 0 1
t228 b 4 INT 9 10 10 0 1
t228 c 4 INT 9 10 10 0 1
t228 d 4 INT 9 10 10 0 1
t228 e 4 INT 9 10 10 0 1
t229 a 4 INT 9 10 10 0 1
t229 b 4 INT 9 10 10 0 1
t229 c 4 INT 9 10 10 0 1
t229 d 4 INT 9 10 10 0 1
t229 e 4 INT 9 10 10 0 1
t230 a 4 INT 9 10 10 0 1
t230 b 4 INT 9 10 10 0 1
t230 c 4 INT 9 10 10 0 1
t230 d 4 INT 9 10 10 0 1
t230 e 4 INT 9 10 10 0 1
t231 a 4 INT 9 10 10 0 1
t231 b 4 INT 9 10 10 0 1
t231 c 4 INT 9 10 10 0 1
t231 d 4 INT 9 10 10 0 1
t231 e 4 INT 9 10 10 0 1
t232 a 4 INT 9 10 10 0 1
t232 b 4 INT 9 10 10 0 1
t232 c 4 INT 9 10 10 0 1
t232 d 4 INT 9 10 10 0 1
t232 e 4 INT 9 10 10 0 1
t233 a 4 INT 9 10 10 0 1
t233 b 4 INT 9 10 10 0 1
t233 c 4 INT 9 10 10 0 1
t233 d 4 INT 9 10 10 0 1
t233 e 4 INT 9 10 10 0 1
t234 a 4 INT 9 10 10 0 1
t234 b 4 INT 9 10 10 0 1
t234 c 4 INT 9 10 10 0 1
t234 d 4 INT 9 10 10 0 1
t234 e 4 INT 9 10 10 0 1
t235 a 4 INT 9 10 10 0 1
t235 b 4 INT 9 10 10 0 1
t235 c 4 INT 9 10 10 0 1
t235 d 4 INT 9 10 10 0 1
t235 e 4 INT 9 10 10 0 1
t236 a 4 INT 9 10 10 0 1
t236 b 4 INT 9 10 10 0 1
t236 c 4 INT 9 10 10 0 1
t236 d 4 INT 9 10 10 0 1
t236 e 4 INT 9 10 10 0 1
t237 a 4 INT 9 10 10 0 1
t237 b 4 INT 9 10 10 0 1
t237 c 4 INT 9 10 10 0 1
t237 d 4 INT 9 10 10 0 1
t237 e 4 INT 9 10 10 0 1
t238 a 4 INT 9 10 10 0 1
t238 b 4 INT 9 10 10 0 1
t238 c 4 INT 9 10 10 0 1
t238 d 4 INT 9 10 10 0 1
t238 e 4 INT 9 10 10 0 1
t239 a 4 INT 9 10 10 0 1
t239 b 4 INT 9 10 10 0 1
t239 c 4 INT 9 10 10 0 1
t239 d 4 INT 9 10 10 0 1
t239 e 4 INT 9 10 10 0 1
t240 a 4 INT 9 10 10 0 1
t240 b 4 INT 9 10 10 0 1
t240 c 4 INT 9 10 10 0 1
t240 d 4 INT 9 10 10 0 1
t240 e 4 INT 9 10 10 0 1
t241 a 4 INT 9 10 10 0 1
t241 b 4 INT 9 10 10 0 1
t241 c 4 INT 9 10 10 0 1
t241 d 4 INT 9 10 10 0 1
t241 e 4 INT 9 10 10 0 1
t242 a 4 INT 9 10 10 0 1
t242 b 4 INT 9 10 10 0 1
t242 c 4 INT 9 10 10 0 1
t242 d 4 INT 9 10 10 0 1
t242 e 4 INT 9 10 10 0 1
t243 a 4 INT 9 10 10 0 1
t243 b 4 INT 9 10 10 0 1
t243 c 4 INT 9 10 10 0 1
t243 d 4 INT 9 10 10 0 1
t243 e 4 INT 9 10 10 0 1
t244 a 4 INT 9 10 10 0 1
t244 b 4 INT 9 10 10 0 1
t244 c 4 INT 9 10 10 0 1
t244 d 4 INT 9 10 10 0 1
t244 e 4 INT 9 10 10 0 1
t245 a 4 INT 9 10 10 0 1
t245 b 4 INT 9 10 10 0 1
t245 c 4 INT 9 10 10 0 1
t245 d 4 INT 9 10 10 0 1
t245 e 4 INT 9 10 10 0 1
t246 a 4 INT 9 10 10 0 1
t246 b 4 INT 9 10 10 0 1
t246 c 4 INT 9 10 10 0 1
t246 d 4 INT 9 10 10 0 1
t246 e 4 INT 9 10 10 0 1
t247 a 4 INT 9 10 10 0 1
t247 b 4 INT 9 10 10 0 1
t247 c 4 INT 9 10 10 0 1
t247 d 4 INT 9 10 10 0 1
t247 e 4 INT 9 10 10 0 1
t248 a 4 INT 9 10 10 0 1
t248 b 4 INT 9 10 10 0 1
t248 c 4 INT 9 10 10 0 1
t248 d 4 INT 9 10 10 0 1
t248 e 4 INT 9 10 10 0 1
t249 a 4 INT 9 10 10 0 1
t249 b 4 INT 9 10 10 0 1
t249 c 4 INT 9 10 10 0 1
t249 d 4 INT 9 10 10 0 1
t249 e 4 INT 9 10 10 0 1
t250 a 4 INT 9 10 10 0 1
t250 b 4 INT 9 10 10 0 1
t250 c 4 INT 9 10 10 0 1
t250 d 4 INT 9 10 10 0 1
t250 e 4 INT 9 10 10 0 1
t251 a 4 INT 9 10 10 0 1
t251 b 4 INT 9 10 10 0 1
t251 c 4 INT 9 10 10 0 1
t251 d 4 INT 9 10 10 0 1
t251 e 4 INT 9 10 10 0 1
t252 a 4 INT 9 10 10 0 1
t252 b 4 INT 9 10 10 0 1
t252 c 4 INT 9 10 10 0 1
t252 d 4 INT 9 10 10 0 1
t252 e 4 INT 9 10 10 0 1
t253 a 4 INT 9 10 10 0 1
t253 b 4 INT 9 10 10 0 1
t253 c 4 INT 9 10 10 0 1
t253 d 4 INT 9 10 10 0 1
t253 e 4 INT 9 10 10 0 1
t254 a 4 INT 9 10 10 0 1
t254 b 4 INT 9 10 10 0 1
t254 c 4 INT 9 10 10 0 1
t254 d 4 INT 9 10 10 0 1
t254 e 4 INT 9 10 10 0 1
t255 a 4 INT 9 10 10 0 1
t255 b 4 INT 9 10 10 0 1
t255 c 4 INT 9 10 10 0 1
t255 d 4 INT 9 10 10 0 1
t255 e 4 INT 9 10 10 0 1
t256 a 4 INT 9 10 10 0 1
t256 b 4 INT 9 10 10 0 1
t256 c 4 INT 9 10 10 0 1
t256 d 4 INT 9 10 10 0 1
t256 e 4 INT 9 10 10 0 1
t257 a 4 INT 9 10 10 0 1
t257 b 4 INT 9 10 10 0 1
t257 c 4 INT 9 10 10 0 1
t257 d 4 INT 9 10 10 0 1
t257 e 4 INT 9 10 10 0 1
t258 a 4 INT 9 10 10 0 1
t258 b 4 INT 9 10 10 0 1
t258 c 4 INT 9 10 10 0 1
t258 d 4 INT 9 10 10 0 1
t258 e 4 INT 9 10 10 0 1
t259 a 4 INT 9 10 10 0 1
t259 b 4 INT 9 10 10 0 1
t259 c 4 INT 9 10 10 0 1
t259 d 4 INT 9 10 10 0 1
t259 e 4 INT 9 10 10 0 1
t260 a 4 INT 9 10 10 0 1
t260 b 4 INT 9 10 10 0 1
t260 c 4 INT 9 10 10 0 1
t260 d 4 INT 9 10 10 0 1
t260 e 4 INT 9 10 10 0 1
t261 a 4 INT 9 10 10 0 1
t261 b 4 INT 9 10 10 0 1
t261 c 4 INT 9 10 10 0 1
t261 d 4 INT 9 10 10 0 1
t261 e 4 INT 9 10 10 0 1
t262 a 4 INT 9 10 10 0 1
t262 b 4 INT 9 10 10 0 1
t262 c 4 INT 9 10 10 0 1
t262 d 4 INT 9 10 10 0 1
t262 e 4 INT 9 10 10 0 1
t263 a 4 INT 9 10 10 0 1
t263 b 4 INT 9 10 10 0 1
t263 c 4 INT 9 10 10 0 1
t263 d 4 INT 9 10 10 0 1
t263 e 4 INT 9 10 10 0 1
t264 a 4 INT 9 10 10 0 1
t264 b 4 INT 9 10 10 0 1
t264 c 4 INT 9 10 10 0 1
t264 d 4 INT 9 10 10 0 1
t264 e 4 INT 9 10 10 0 1
t265 a 4 INT 9 10 10 0 1
t265 b 4 INT 9 10 10 0 1
t265 c 4 INT 9 10 10 0 1
t265 d 4 INT 9 10 10 0 1
t265 e 4 INT 9 10 10 0 1
t266 a 4 INT 9 10 10 0 1
t266 b 4 INT 9 10 10 0 1
t266 c 4 INT 9 10 10 0 1
t266 d 4 INT 9 10 10 0 1
t266 e 4 INT 9 10 10 0 1
t267 a 4 INT 9 10 10 0 1
t267 b 4 INT 9 10 10 0 1
t267 c 4 INT 9 10 10 0 1
t267 d 4 INT 9 10 10 0 1
t267 e 4 INT 9 10 10 0 1
t268 a 4 INT 9 10 10 0 1
t268 b 4 INT 9 10 10 0 1
t268 c 4 INT 9 10 10 0 1
t268 d 4 INT 9 10 10 0 1
t268 e 4 INT 9 10 10 0 1
t269 a 4 INT 9 10 10 0 1
t269 b 4 INT 9 10 10 0 1
t269 c 4 INT 9 10 10 0 1
t269 d 4 INT 9 10 10 0 1
t269 e 4 INT 9 10 10 0 1
t270 a 4 INT 9 10 10 0 1
t270 b 4 INT 9 10 10 0 1
t270 c 4 INT 9 10 10 0 1
t270 d 4 INT 9 10 10 0 1
t270 e 4 INT 9 10 10 0 1
t271 a 4 INT 9 10 10 0 1
t271 b 4 INT 9 10 10 0 1
t271 c 4 INT 9 10 10 0 1
t271 d 4 INT 9 10 10 0 1
t271 e 4 INT 9 10 10 0 1
t272 a 4 INT 9 10 10 0 1
t272 b 4 INT 9 10 10 0 1
t272 c 4 INT 9 10 10 0 1
t272 d 4 INT 9 10 10 0 1
t272 e 4 INT 9 10 10 0 1
t273 a 4 INT 9 10 10 0 1
t273 b 4 INT 9 10 10 0 1
t273 c 4 INT 9 10 10 0 1
t273 d 4 INT 9 10 10 0 1
t273 e 4 INT 9 10 10 0 1
t274 a 4 INT 9 10 10 0 1
t274 b 4 INT 9 10 10 0 1
t274 c 4 INT 9 10 10 0 1
t274 d 4 INT 9 10 10 0 1
t274 e 4 INT 9 10 10 0 1
t275 a 4 INT 9 10 10 0 1
t275 b 4 INT 9 10 10 0 1
t275 c 4 INT 9 10 10 0 1
t275 d 4 INT 9 10 10 0 1
t275 e 4 INT 9 10 10 0 1
t276 a 4 INT 9 10 10 0 1
t276 b 4 INT 9 10 10 0 1
t276 c 4 INT 9 10 10 0 1
t276 d 4 INT 9 10 10 0 1
t276 e 4 INT 9 10 10 0 1
t277 a 4 INT 9 10 10 0 1
t277 b 4 INT 9 10 10 0 1
t277 c 4 INT 9 10 10 0 1
t277 d 4 INT 9 10 10 0 1
t277 e 4 INT 9 10 10 0 1
t278 a 4 INT 9 10 10 0 1
t278 b 4 INT 9 10 10 0 1
t278 c 4 INT 9 10 10 0 1
t278 d 4 INT 9 10 10 0 1
t278 e 4 INT 9 10 10 0 1
t279 a 4 INT 9 10 10 0 1
t279 b 4 INT 9 10 10 0 1
t279 c 4 INT 9 10 10 0 1
t279 d 4 INT 9 10 10 0 1
t279 e 4 INT 9 10 10 0 1
t280 a 4 INT 9 10 10 0 1
t280 b 4 INT 9 10 10 0 1
t280 c 4 INT 9 10 10 0 1
t280 d 4 INT 9 10 10 0 1
t280 e 4 INT 9 10 10 0 1
t281 a 4 INT 9 10 10 0 1
t281 b 4 INT 9 10 10 0 1
t281 c 4 INT 9 10 10 0 1
t281 d 4 INT 9 10 10 0 1
t281 e 4 INT 9 10 10 0 1
t282 a 4 INT 9 10 10 0 1
t282 b 4 INT 9 10 10 0 1
t282 c 4 INT 9 10 10 0 1
t282 d 4 INT 9 10 10 0 1
t282 e 4 INT 9 10 10 0 1
t283 a 4 INT 9 10 10 0 1
t283 b 4 INT 9 10 10 0 1
t283 c 4 INT 9 10 10 0 1
t283 d 4 INT 9 10 10 0 1
t283 e 4 INT 9 10 10 0 1
t284 a 4 INT 9 10 10 0 1
t284 b 4 INT 9 10 10 0 1
t284 c 4 INT 9 10 10 0 1
t284 d 4 INT 9 10 10 0 1
t284 e 4 INT 9 10 10 0 1
t285 a 4 INT 9 10 10 0 1
t285 b 4 INT 9 10 10 0 1
t285 c 4 INT 9 10 10 0 1
t285 d 4 INT 9 10 10 0 1
t285 e 4 INT 9 10 10 0 1
t286 a 4 INT 9 10 10 0 1
t286 b 4 INT 9 10 10 0 1
t286 c 4 INT 9 10 10 0 1
t286 d 4 INT 9 10 10 0 1
t286 e 4 INT 9 10 10 0 1
t287 a 4 INT 9 10 10 0 1
t287 b 4 INT 9 10 10 0 1
t287 c 4 INT 9 10 10 0 1
t287 d 4 INT 9 10 10 0 1
t287 e 4 INT 9 10 10 0 1
t288 a 4 INT 9 10 10 0 1
t288 b 4 INT 9 10 10 0 1
t288 c 4 INT 9 10 10 0 1
t288 d 4 INT 9 10 10 0 1
t288 e 4 INT 9 10 10 0 1
t289 a 4 INT 9 10 10 0 1
t289 b 4 INT 9 10 10 0 1
t289 c 4 INT 9 10 10 0 1
t289 d 4 INT 9 10 10 0 1
t289 e 4 INT 9 10 10 0 1
t290 a 4 INT 9 10 10 0 1
t290 b 4 INT 9 10 10 0 1
t290 c 4 INT 9 10 10 0 1
t290 d 4 INT 9 10 10 0 1
t290 e 4 INT 9 10 10 0 1
t291 a 4 INT 9 10 10 0 1
t291 b 4 INT 9 10 10 0 1
t291 c 4 INT 9 10 10 0 1
t291 d 4 INT 9 10 10 0 1
t291 e 4 INT 9 10 10 0 1
t292 a 4 INT 9 10 10 0 1
t292 b 4 INT 9 10 10 0 1
t292 c 4 INT 9 10 10 0 1
t292 d 4 INT 9 10 10 0 1
t292 e 4 INT 9 10 10 0 1
t293 a 4 INT 9 10 10 0 1
t293 b 4 INT 9 10 10 0 1
t293 c 4 INT 9 10 10 0 1
t293 d 4 INT 9 10 10 0 1
t293 e 4 INT 9 10 10 0 1
t294 a 4 INT 9 10 10 0 1
t294 b 4 INT 9 10 10 0 1
t294 c 4 INT 9 10 10 0 1
t294 d 4 INT 9 10 10 0 1
t294 e 4 INT 9 10 10 0 1
t295 a 4 INT 9 10 10 0 1
t295 b 4 INT 9 10 10 0 1
t295 c 4 INT 9 10 10 0 1
t295 d 4 INT 9 10 10 0 1
t295 e 4 INT 9 10 10 0 1
t296 a 4 INT 9 10 10 0 1
t296 b 4 INT 9 10 10 0 1
t296 c 4 INT 9 10 10 0 1
t296 d 4 INT 9 10 10 0 1
t296 e 4 INT 9 10 10 0 1
t297 a 4 INT 9 10 10 0 1
t297 b 4 INT 9 10 10 0 1
t297 c 4 INT 9 10 10 0 1
t297 d 4 INT 9 10 10 0 1
t297 e 4 INT 9 10 10 0 1
t298 a 4 INT 9 10 10 0 1
t298 b 4 INT 9 10 10 0 1
t298 c 4 INT 9 10 10 0 1
t298 d 4 INT 9 10 10 0 1
t298 e 4 INT 9 10 10 0 1
t299 a 4 INT 9 10 10 0 1
t299 b 4 INT 9 10 10 0 1
t299 c 4 INT 9 10 10 0 1
t299 d 4 INT 9 10 10 0 1
t299 e 4 INT 9 10 10 0 1
t300 a 4 INT 9 10 10 0 1
t300 b 4 INT 9 10 10 0 1
t300 c 4 INT 9 10 10 0 1
t300 d 4 INT 9 10 10 0 1
t300 e 4 INT 9 10 10 0 1
t301 a 4 INT 9 10 10 0 1
t301 b 4 INT 9 10 10 0 1
t301 c 4 INT 9 10 10 0 1
t301 d 4 INT 9 10 10 0 1
t301 e 4 INT 9 10 10 0 1
t302 a 4 INT 9 10 10 0 1
t302 b 4 INT 9 10 10 0 1
t302 c 4 INT 9 10 10 0 1
t302 d 4 INT 9 10 10 0 1
t302 e 4 INT 9 10 10 0 1
t303 a 4 INT 9 10 10 0 1
t303 b 4 INT 9 10 10 0 1
t303 c 4 INT 9 10 10 0 1
t303 d 4 INT 9 10 10 0 1
t303 e 4 INT 9 10 10 0 1
t304 a 4 INT 9 10 10 0 1
t304 b 4 INT 9 10 10 0 1
t304 c 4 INT 9 10 10 0 1
t304 d 4 INT 9 10 10 0 1
t304 e 4 INT 9 10 10 0 1
t305 a 4 INT 9 10 10 0 1
t305 b 4 INT 9 10 10 0 1
t305 c 4 INT 9 10 10 0 1
t305 d 4 INT 9 10 10 0 1
t305 e 4 INT 9 10 10 0 1
t306 a 4 INT 9 10 10 0 1
t306 b 4 INT 9 10 10 0 1
t306 c 4 INT 9 10 10 0 1
t306 d 4 INT 9 10 10 0 1
t306 e 4 INT 9 10 10 0 1
t307 a 4 INT 9 10 10 0 1
t307 b 4 INT 9 10 10 0 1
t307 c 4 INT 9 10 10 0 1
t307 d 4 INT 9 10 10 0 1
t307 e 4 INT 9 10 10 0 1
t308 a 4 INT 9 10 10 0 1
t308 b 4 INT 9 10 10 0 1
t308 c 4 INT 9 10 10 0 1
t308 d 4 INT 9 10 10 0 1
t308 e 4 INT 9 10 10 0 1
t309 a 4 INT 9 10 10 0 1
t309 b 4 INT 9 10 10 0 1
t309 c 4 INT 9 10 10 0 1
t309 d 4 INT 9 10 10 0 1
t309 e 4 INT 9 10 10 0 1
t310 a 4 INT 9 10 10 0 1
t310 b 4 INT 9 10 10 0 1
t310 c 4 INT 9 10 10 0 1
t310 d 4 INT 9 10 10 0 1
t310 e 4 INT 9 10 10 0 1
t311 a 4 INT 9 10 10 0 1
t311 b 4 INT 9 10 10 0 1
t311 c 4 INT 9 10 10 0 1
t311 d 4 INT 9 10 10 0 1
t311 e 4 INT 9 10 10 0 1
t312 a 4 INT 9 10 10 0 1
t312 b 4 INT 9 10 10 0 1
t312 c 4 INT 9 10 10 0 1
t312 d 4 INT 9 10 10 0 1
t312 e 4 INT 9 10 10 0 1
t313 a 4 INT 9 10 10 0 1
t313 b 4 INT 9 10 10 0 1
t313 c 4 INT 9 10 10 0 1
t313 d 4 INT 9 10 10 0 1
t313 e 4 INT 9 10 10 0 1
t314 a 4 INT 9 10 10 0 1
t314 b 4 INT 9 10 10 0 1
t314 c 4 INT 9 10 10 0 1
t314 d 4 INT 9 10 10 0 1
t314 e 4 INT 9 10 10 0 1
t315 a 4 INT 9 10 10 0 1
t315 b 4 INT 9 10 10 0 1
t315 c 4 INT 9 10 10 0 1
t315 d 4 INT 9 10 10 0 1
t315 e 4 INT 9 10 10 0 1
t316 a 4 INT 9 10 10 0 1
t316 b 4 INT 9 10 10 0 1
t316 c 4 INT 9 10 10 0 1
t316 d 4 INT 9 10 10 0 1
t316 e 4 INT 9 10 10 0 1
t317 a 4 INT 9 10 10 0 1
t317 b 4 INT 9 10 10 0 1
t317 c 4 INT 9 10 10 0 1
t317 d 4 INT 9 10 10 0 1
t317 e 4 INT 9 10 10 0 1
t318 a 4 INT 9 10 10 0 1
t318 b 4 INT 9 10 10 0 1
t318 c 4 INT 9 10 10 0 1
t318 d 4 INT 9 10 10 0 1
t318 e 4 INT 9 10 10 0 1
t319 a 4 INT 9 10 10 0 1
t319 b 4 INT 9 10 10 0 1
t319 c 4 INT 9 10 10 0 1
t319 d 4 INT 9 10 10 0 1
t319 e 4 INT 9 10 10 0 1
t320 a 4 INT 9 10 10 0 1
t320 b 4 INT 9 10 10 0 1
t320 c 4 INT 9 10 10 0 1
t320 d 4 INT 9 10 10 0 1
t320 e 4 INT 9 10 10 0 1
t321 a 4 INT 9 10 10 0 1
t321 b 4 INT 9 10 10 0 1
t321 c 4 INT 9 10 10 0 1
t321 d 4 INT 9 10 10 0 1
t321 e 4 INT 9 10 10 0 1
t322 a 4 INT 9 10 10 0 1
t322 b 4 INT 9 10 10 0 1
t322 c 4 INT 9 10 10 0 1
t322 d 4 INT 9 10 10 0 1
t322 e 4 INT 9 10 10 0 1
t323 a 4 INT 9 10 10 0 1
t323 b 4 INT 9 10 10 0 1
t323 c 4 INT 9 10 10 0 1
t323 d 4 INT 9 10 10 0 1
t323 e 4 INT 9 10 10 0 1
t324 a 4 INT 9 10 10 0 1
t324 b 4 INT 9 10 10 0 1
t324 c 4 INT 9 10 10 0 1
t324 d 4 INT 9 10 10 0 1
t324 e 4 INT 9 10 10 0 1
t325 a 4 INT 9 10 10 0 1
t325 b 4 INT 9 10 10 0 1
t325 c 4 INT 9 10 10 0 1
t325 d 4 INT 9 10 10 0 1
t325 e 4 INT 9 10 10 0 1
t326 a 4 INT 9 10 10 0 1
t326 b 4 INT 9 10 10 0 1
t326 c 4 INT 9 10 10 0 1
t326 d 4 INT 9 10 10 0 1
t326 e 4 INT 9 10 10 0 1
t327 a 4 INT 9 10 10 0 1
t327 b 4 INT 9 10 10 0 1
t327 c 4 INT 9 10 10 0 1
t327 d 4 INT 9 10 10 0 1
t327 e 4 INT 9 10 10 0 1
t328 a 4 INT 9 10 10 0 1
t328 b 4 INT 9 10 10 0 1
t328 c 4 INT 9 10 10 0 1
t328 d 4 INT 9 10 10 0 1
t328 e 4 INT 9 10 10 0 1
t329 a 4 INT 9 10 10 0 1
t329 b 4 INT 9 10 10 0 1
t329 c 4 INT 9 10 10 0 1
t329 d 4 INT 9 10 10 0 1
t329 e 4 INT 9 10 10 0 1
t330 a 4 INT 9 10 10 0 1
t330 b 4 INT 9 10 10 0 1
t330 c 4 INT 9 10 10 0 1
t330 d 4 INT 9 10 10 0 1
t330 e 4 INT 9 10 10 0 1
t331 a 4 INT 9 10 10 0 1
t331 b 4 INT 9 10 10 0 1
t331 c 4 INT 9 10 10 0 1
t331 d 4 INT 9 10 10 0 1
t331 e 4 INT 9 10 10 0 1
t332 a 4 INT 9 10 10 0 1
t332 b 4 INT 9 10 10 0 1
t332 c 4 INT 9 10 10 0 1
t332 d 4 INT 9 10 10 0 1
t332 e 4 INT 9 10 10 0 1
t333 a 4 INT 9 10 10 0 1
t333 b 4 INT 9 10 10 0 1
t333 c 4 INT 9 10 10 0 1
t333 d 4 INT 9 10 10 0 1
t333 e 4 INT 9 10 10 0 1
t334 a 4 INT 9 10 10 0 1
t334 b 4 INT 9 10 10 0 1
t334 c 4 INT 9 10 10 0 1
t334 d 4 INT 9 10 10 0 1
t334 e 4 INT 9 10 10 0 1
t335 a 4 INT 9 10 10 0 1
t335 b 4 INT 9 10 10 0 1
t335 c 4 INT 9 10 10 0 1
t335 d 4 INT 9 10 10 0 1
t335 e 4 INT 9 10 10 0 1
t336 a 4 INT 9 10 10 0 1
t336 b 4 INT 9 10 10 0 1
t336 c 4 INT 9 10 10 0 1
t336 d 4 INT 9 10 10 0 1
t336 e 4 INT 9 10 10 0 1
t337 a 4 INT 9 10 10 0 1
t337 b 4 INT 9 10 10 0 1
t337 c 4 INT 9 10 10 0 1
t337 d 4 INT 9 10 10 0 1
t337 e 4 INT 9 10 10 0 1
t338 a 4 INT 9 10 10 0 1
t338 b 4 INT 9 10 10 0 1
t338 c 4 INT 9 10 10 0 1
t338 d 4 INT 9 10 10 0 1
t338 e 4 INT 9 10 10 0 1
t339 a 4 INT 9 10 10 0 1
t339 b 4 INT 9 10 10 0 1
t339 c 4 INT 9 10 10 0 1
t339 d 4 INT 9 10 10 0 1
t339 e 4 INT 9 10 10 0 1
t340 a 4 INT 9 10 10 0 1
t340 b 4 INT 9 10 10 0 1
t340 c 4 INT 9 10 10 0 1
t340 d 4 INT 9 10 10 0 1
t340 e 4 INT 9 10 10 0 1
t341 a 4 INT 9 10 10 0 1
t341 b 4 INT 9 10 10 0 1
t341 c 4 INT 9 10 10 0 1
t341 d 4 INT 9 10 10 0 1
t341 e 4 INT 9 10 10 0 1
t342 a 4 INT 9 10 10 0 1
t342 b 4 INT 9 10 10 0 1
t342 c 4 INT 9 10 10 0 1
t342 d 4 INT 9 10 10 0 1
t342 e 4 INT 9 10 10 0 1
t343 a 4 INT 9 10 10 0 1
t343 b 4 INT 9 10 10 0 1
t343 c 4 INT 9 10 10 0 1
t343 d 4 INT 9 10 10 0 1
t343 e 4 INT 9 10 10 0 1
t344 a 4 INT 9 10 10 0 1
t344 b 4 INT 9 10 10 0 1
t344 c 4 INT 9 10 10 0 1
t344 d 4 INT 9 10 10 0 1
t344 e 4 INT 9 10 10 0 1
t345 a 4 INT 9 10 10 0 1
t345 b 4 INT 9 10 10 0 1
t345 c 4 INT 9 10 10 0 1
t345 d 4 INT 9 10 10 0 1
t345 e 4 INT 9 10 10 0 1
t346 a 4 INT 9 10 10 0 1
t346 b 4 INT 9 10 10 0 1
t346 c 4 INT 9 10 10 0 1
t346 d 4 INT 9 10 10 0 1
t346 e 4 INT 9 10 10 0 1
t347 a 4 INT 9 10 10 0 1
t347 b 4 INT 9 10 10 0 1
t347 c 4 INT 9 10 10 0 1
t347 d 4 INT 9 10 10 0 1
t347 e 4 INT 9 10 10 0 1
t348 a 4 INT 9 10 10 0 1
t348 b 4 INT 9 10 10 0 1
t348 c 4 INT 9 10 10 0 1
t348 d 4 INT 9 10 10 0 1
t348 e 4 INT 9 10 10 0 1
t349 a 4 INT 9 10 10 0 1
t349 b 4 INT 9 10 10 0 1
t349 c 4 INT 9 10 10 0 1
t349 d 4 INT 9 10 10 0 1
t349 e 4 INT 9 10 10 0 1
t350 a 4 INT 9 10 10 0 1
t350 b 4 INT 9 10 10 0 1
t350 c 4 INT 9 10 10 0 1
t350 d 4 INT 9 10 10 0 1
t350 e 4 INT 9 10 10 0 1
t351 a 4 INT 9 10 10 0 1
t351 b 4 INT 9 10 10 0 1
t351 c 4 INT 9 10 10 0 1
t351 d 4 INT 9 10 10 0 1
t351 e 4 INT 9 10 10 0 1
t352 a 4 INT 9 10 10 0 1
t352 b 4 INT 9 10 10 0 1
t352 c 4 INT 9 10 10 0 1
t352 d 4 INT 9 10 10 0 1
t352 e 4 INT 9 10 10 0 1
t353 a 4 INT 9 10 10 0 1
t353 b 4 INT 9 10 10 0 1
t353 c 4 INT 9 10 10 0 1
t353 d 4 INT 9 10 10 0 1
t353 e 4 INT 9 10 10 0 1
t354 a 4 INT 9 10 10 0 1
t354 b 4 INT 9 10 10 0 1
t354 c 4 INT 9 10 10 0 1
t354 d 4 INT 9 10 10 0 1
t354 e 4 INT 9 10 10 0 1
t355 a 4 INT 9 10 10 0 1
t355 b 4 INT 9 10 10 0 1
t355 c 4 INT 9 10 10 0 1
t355 d 4 INT 9 10 10 0 1
t355 e 4 INT 9 10 10 0 1
t356 a 4 INT 9 10 10 0 1
t356 b 4 INT 9 10 10 0 1
t356 c 4 INT 9 10 10 0 1
t356 d 4 INT 9 10 10 0 1
t356 e 4 INT 9 10 10 0 1
t357 a 4 INT 9 10 10 0 1
t357 b 4 INT 9 10 10 0 1
t357 c 4 INT 9 10 10 0 1
t357 d 4 INT 9 10 10 0 1
t357 e 4 INT 9 10 10 0 1
t358 a 4 INT 9 10 10 0 1
t358 b 4 INT 9 10 10 0 1
t358 c 4 INT 9 10 10 0 1
t358 d 4 INT 9 10 10 0 1
t358 e 4 INT 9 10 10 0 1
t359 a 4 INT 9 10 10 0 1
t359 b 4 INT 9 10 10 0 1
t359 c 4 INT 9 10 10 0 1
t359 d 4 INT 9 10 10 0 1
t359 e 4 INT 9 10 10 0 1
t360 a 4 INT 9 10 10 0 1
t360 b 4 INT 9 10 10 0 1
t360 c 4 INT 9 10 10 0 1
t360 d 4 INT 9 10 10 0 1
t360 e 4 INT 9 10 10 0 1
t361 a 4 INT 9 10 10 0 1
t361 b 4 INT 9 10 10 0 1
t361 c 4 INT 9 10 10 0 1
t361 d 4 INT 9 10 10 0 1
t361 e 4 INT 9 10 10 0 1
t362 a 4 INT 9 10 10 0 1
t362 b 4 INT 9 10 10 0 1
t362 c 4 INT 9 10 10 0 1
t362 d 4 INT 9 10 10 0 1
t362 e 4 INT 9 10 10 0 1
t363 a 4 INT 9 10 10 0 1
t363 b 4 INT 9 10 10 0 1
t363 c 4 INT 9 10 10 0 1
t363 d 4 INT 9 10 10 0 1
t363 e 4 INT 9 10 10 0 1
t364 a 4 INT 9 10 10 0 1
t364 b 4 INT 9 10 10 0 1
t364 c 4 INT 9 10 10 0 1
t364 d 4 INT 9 10 10 0 1
t364 e 4 INT 9 10 10 0 1
t365 a 4 INT 9 10 10 0 1
t365 b 4 INT 9 10 10 0 1
t365 c 4 INT 9 10 10 0 1
t365 d 4 INT 9 10 10 0 1
t365 e 4 INT 9 10 10 0 1
t366 a 4 INT 9 10 10 0 1
t366 b 4 INT 9 10 10 0 1
t366 c 4 INT 9 10 10 0 1
t366 d 4 INT 9 10 10 0 1
t366 e 4 INT 9 10 10 0 1
t367 a 4 INT 9 10 10 0 1
t367 b 4 INT 9 10 10 0 1
t367 c 4 INT 9 10 10 0 1
t367 d 4 INT 9 10 10 0 1
t367 e 4 INT 9 10 10 0 1
t368 a 4 INT 9 10 10 0 1
t368 b 4 INT 9 10 10 0 1
t368 c 4 INT 9 10 10 0 1
t368 d 4 INT 9 10 10 0 1
t368 e 4 INT 9 10 10 0 1
t369 a 4 INT 9 10 10 0 1
t369 b 4 INT 9 10 10 0 1
t369 c 4 INT 9 10 10 0 1
t369 d 4 INT 9 10 10 0 1
t369 e 4 INT 9 10 10 0 1
t370 a 4 INT 9 10 10 0 1
t370 b 4 INT 9 10 10 0 1
t370 c 4 INT 9 10 10 0 1
t370 d 4 INT 9 10 10 0 1
t370 e 4 INT 9 10 10 0 1
t371 a 4 INT 9 10 10 0 1
t371 b 4 INT 9 10 10 0 1
t371 c 4 INT 9 10 10 0 1
t371 d 4 INT 9 10 10 0 1
t371 e 4 INT 9 10 10 0 1
t372 a 4 INT 9 10 10 0 1
t372 b 4 INT 9 10 10 0 1
t372 c 4 INT 9 10 10 0 1
t372 d 4 INT 9 10 10 0 1
t372 e 4 INT 9 10 10 0 1
t373 a 4 INT 9 10 10 0 1
t373 b 4 INT 9 10 10 0 1
t373 c 4 INT 9 10 10 0 1
t373 d 4 INT 9 10 10 0 1
t373 e 4 INT 9 10 10 0 1
t374 a 4 INT 9 10 10 0 1
t374 b 4 INT 9 10 10 0 1
t374 c 4 INT 9 10 10 0 1
t374 d 4 INT 9 10 10 0 1
t374 e 4 INT 9 10 10 0 1
t375 a 4 INT 9 10 10 0 1
t375 b 4 INT 9 10 10 0 1
t375 c 4 INT 9 10 10 0 1
t375 d 4 INT 9 10 10 0 1
t375 e 4 INT 9 10 10 0 1
t376 a 4 INT 9 10 10 0 1
t376 b 4 INT 9 10 10 0 1
t376 c 4 INT 9 10 10 0 1
t376 d 4 INT 9 10 10 0 1
t376 e 4 INT 9 10 10 0 1
t377 a 4 INT 9 10 10 0 1
t377 b 4 INT 9 10 10 0 1
t377 c 4 INT 9 10 10 0 1
t377 d 4 INT 9 10 10 0 1
t377 e 4 INT 9 10 10 0 1
t378 a 4 INT 9 10 10 0 1
t378 b 4 INT 9 10 10 0 1
t378 c 4 INT 9 10 10 0 1
t378 d 4 INT 9 10 10 0 1
t378 e 4 INT 9 10 10 0 1
t379 a 4 INT 9 10 10 0 1
t379 b 4 INT 9 10 10 0 1
t379 c 4 INT 9 10 10 0 1
t379 d 4 INT 9 10 10 0 1
t379 e 4 INT 9 10 10 0 1
t380 a 4 INT 9 10 10 0 1
t380 b 4 INT 9 10 10 0 1
t380 c 4 INT 9 10 10 0 1
t380 d 4 INT 9 10 10 0 1
t380 e 4 INT 9 10 10 0 1
t381 a 4 INT 9 10 10 0 1
t381 b 4 INT 9 10 10 0 1
t381 c 4 INT 9 10 10 0 1
t381 d 4 INT 9 10 10 0 1
t381 e 4 INT 9 10 10 0 1
t382 a 4 INT 9 10 10 0 1
t382 b 4 INT 9 10 10 0 1
t382 c 4 INT 9 10 10 0 1
t382 d 4 INT 9 10 10 0 1
t382 e 4 INT 9 10 10 0 1
t383 a 4 INT 9 10 10 0 1
t383 b 4 INT 9 10 10 0 1
t383 c 4 INT 9 10 10 0 1
t383 d 4 INT 9 10 10 0 1
t383 e 4 INT 9 10 10 0 1
t384 a 4 INT 9 10 10 0 1
t384 b 4 INT 9 10 10 0 1
t384 c 4 INT 9 10 10 0 1
t384 d 4 INT 9 10 10 0 1
t384 e 4 INT 9 10 10 0 1
t385 a 4 INT 9 10 10 0 1
t385 b 4 INT 9 10 10 0 1
t385 c 4 INT 9 10 10 0 1
t385 d 4 INT 9 10 10 0 1
t385 e 4 INT 9 10 10 0 1
t386 a 4 INT 9 10 10 0 1
t386 b 4 INT 9 10 10 0 1
t386 c 4 INT 9 10 10 0 1
t386 d 4 INT 9 10 10 0 1
t386 e 4 INT 9 10 10 0 1
t387 a 4 INT 9 10 10 0 1
t387 b 4 INT 9 10 10 0 1
t387 c 4 INT 9 10 10 0 1
t387 d 4 INT 9 10 10 0 1
t387 e 4 INT 9 10 10 0 1
t388 a 4 INT 9 10 10 0 1
t388 b 4 INT 9 10 10 0 1
t388 c 4 INT 9 10 10 0 1
t388 d 4 INT 9 10 10 0 1
t388 e 4 INT 9 10 10 0 1
t389 a 4 INT 9 10 10 0 1
t389 b 4 INT 9 10 10 0 1
t389 c 4 INT 9 10 10 0 1
t389 d 4 INT 9 10 10 0 1
t389 e 4 INT 9 10 10 0 1
t390 a 4 INT 9 10 10 0 1
t390 b 4 INT 9 10 10 0 1
t390 c 4 INT 9 10 10 0 1
t390 d 4 INT 9 10 10 0 1
t390 e 4 INT 9 10 10 0 1
t391 a 4 INT 9 10 10 0 1
t391 b 4 INT 9 10 10 0 1
t391 c 4 INT 9 10 10 0 1
t391 d 4 INT 9 10 10 0 1
t391 e 4 INT 9 10 10 0 1
t392 a 4 INT 9 10 10 0 1
t392 b 4 INT 9 10 10 0 1
t392 c 4 INT 9 10 10 0 1
t392 d 4 INT 9 10 10 0 1
t392 e 4 INT 9 10 10 0 1
t393 a 4 INT 9 10 10 0 1
t393 b 4 INT 9 10 10 0 1
t393 c 4 INT 9 10 10 0 1
t393 d 4 INT 9 10 10 0 1
t393 e 4 INT 9 10 10 0 1
t394 a 4 INT 9 10 10 0 1
t394 b 4 INT 9 10 10 0 1
t394 c 4 INT 9 10 10 0 1
t394 d 4 INT 9 10 10 0 1
t394 e 4 INT 9 10 10 0 1
t395 a 4 INT 9 10 10 0 1
t395 b 4 INT 9 10 10 0 1
t395 c 4 INT 9 10 10 0 1
t395 d 4 INT 9 10 10 0 1
t395 e 4 INT 9 10 10 0 1
t396 a 4 INT 9 10 10 0 1
t396 b 4 INT 9 10 10 0 1
t396 c 4 INT 9 10 10 0 1
t396 d 4 INT 9 10 10 0 1
t396 e 4 INT 9 10 10 0 1
t397 a 4 INT 9 10 10 0 1
t397 b 4 INT 9 10 10 0 1
t397 c 4 INT 9 10 10 0 1
t397 d 4 INT 9 10 10 0 1
t397 e 4 INT 9 10 10 0 1
t398 a 4 INT 9 10 10 0 1
t398 b 4 INT 9 10 10 0 1
t398 c 4 INT 9 10 10 0 1
t398 d 4 INT 9 10 10 0 1
t398 e 4 INT 9 10 10 0 1
t399 a 4 INT 9 10 10 0 1
t399 b 4 INT 9 10 10 0 1
t399 c 4 INT 9 10 10 0 1
t399 d 4 INT 9 10 10 0 1
t399 e 4 INT 9 10 10 0 1
DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT CATFUNC=Tables TABLE_TYPE=ODBC CONNECTION='Driver=SQLite3 ODBC Driver;Database=MTR_SUITE_DIR/std_data/test.sqlite3;NoWCHAR=yes' CHARSET=utf8 DATA_CHARSET=utf8;
SELECT * FROM t1 ORDER BY Table_name;
Table_Qualifier Table_Owner Table_Name Table_Type Remark
t000 TABLE
t001 TABLE
t002 TABLE
t003 TABLE
t004 TABLE
t005 TABLE
t006 TABLE
t007 TABLE
t008 TABLE
t009 TABLE
t010 TABLE
t011 TABLE
t012 TABLE
t013 TABLE
t014 TABLE
t015 TABLE
t016 TABLE
t017 TABLE
t018 TABLE
t019 TABLE
t020 TABLE
t021 TABLE
t022 TABLE
t023 TABLE
t024 TABLE
t025 TABLE
t026 TABLE
t027 TABLE
t028 TABLE
t029 TABLE
t030 TABLE
t031 TABLE
t032 TABLE
t033 TABLE
t034 TABLE
t035 TABLE
t036 TABLE
t037 TABLE
t038 TABLE
t039 TABLE
t040 TABLE
t041 TABLE
t042 TABLE
t043 TABLE
t044 TABLE
t045 TABLE
t046 TABLE
t047 TABLE
t048 TABLE
t049 TABLE
t050 TABLE
t051 TABLE
t052 TABLE
t053 TABLE
t054 TABLE
t055 TABLE
t056 TABLE
t057 TABLE
t058 TABLE
t059 TABLE
t060 TABLE
t061 TABLE
t062 TABLE
t063 TABLE
t064 TABLE
t065 TABLE
t066 TABLE
t067 TABLE
t068 TABLE
t069 TABLE
t070 TABLE
t071 TABLE
t072 TABLE
t073 TABLE
t074 TABLE
t075 TABLE
t076 TABLE
t077 TABLE
t078 TABLE
t079 TABLE
t080 TABLE
t081 TABLE
t082 TABLE
t083 TABLE
t084 TABLE
t085 TABLE
t086 TABLE
t087 TABLE
t088 TABLE
t089 TABLE
t090 TABLE
t091 TABLE
t092 TABLE
t093 TABLE
t094 TABLE
t095 TABLE
t096 TABLE
t097 TABLE
t098 TABLE
t099 TABLE
t1 TABLE
t100 TABLE
t101 TABLE
t102 TABLE
t103 TABLE
t104 TABLE
t105 TABLE
t106 TABLE
t107 TABLE
t108 TABLE
t109 TABLE
t110 TABLE
t111 TABLE
t112 TABLE
t113 TABLE
t114 TABLE
t115 TABLE
t116 TABLE
t117 TABLE
t118 TABLE
t119 TABLE
t120 TABLE
t121 TABLE
t122 TABLE
t123 TABLE
t124 TABLE
t125 TABLE
t126 TABLE
t127 TABLE
t128 TABLE
t129 TABLE
t130 TABLE
t131 TABLE
t132 TABLE
t133 TABLE
t134 TABLE
t135 TABLE
t136 TABLE
t137 TABLE
t138 TABLE
t139 TABLE
t140 TABLE
t141 TABLE
t142 TABLE
t143 TABLE
t144 TABLE
t145 TABLE
t146 TABLE
t147 TABLE
t148 TABLE
t149 TABLE
t150 TABLE
t151 TABLE
t152 TABLE
t153 TABLE
t154 TABLE
t155 TABLE
t156 TABLE
t157 TABLE
t158 TABLE
t159 TABLE
t160 TABLE
t161 TABLE
t162 TABLE
t163 TABLE
t164 TABLE
t165 TABLE
t166 TABLE
t167 TABLE
t168 TABLE
t169 TABLE
t170 TABLE
t171 TABLE
t172 TABLE
t173 TABLE
t174 TABLE
t175 TABLE
t176 TABLE
t177 TABLE
t178 TABLE
t179 TABLE
t180 TABLE
t181 TABLE
t182 TABLE
t183 TABLE
t184 TABLE
t185 TABLE
t186 TABLE
t187 TABLE
t188 TABLE
t189 TABLE
t190 TABLE
t191 TABLE
t192 TABLE
t193 TABLE
t194 TABLE
t195 TABLE
t196 TABLE
t197 TABLE
t198 TABLE
t199 TABLE
t200 TABLE
t201 TABLE
t202 TABLE
t203 TABLE
t204 TABLE
t205 TABLE
t206 TABLE
t207 TABLE
t208 TABLE
t209 TABLE
t210 TABLE
t211 TABLE
t212 TABLE
t213 TABLE
t214 TABLE
t215 TABLE
t216 TABLE
t217 TABLE
t218 TABLE
t219 TABLE
t220 TABLE
t221 TABLE
t222 TABLE
t223 TABLE
t224 TABLE
t225 TABLE
t226 TABLE
t227 TABLE
t228 TABLE
t229 TABLE
t230 TABLE
t231 TABLE
t232 TABLE
t233 TABLE
t234 TABLE
t235 TABLE
t236 TABLE
t237 TABLE
t238 TABLE
t239 TABLE
t240 TABLE
t241 TABLE
t242 TABLE
t243 TABLE
t244 TABLE
t245 TABLE
t246 TABLE
t247 TABLE
t248 TABLE
t249 TABLE
t250 TABLE
t251 TABLE
t252 TABLE
t253 TABLE
t254 TABLE
t255 TABLE
t256 TABLE
t257 TABLE
t258 TABLE
t259 TABLE
t260 TABLE
t261 TABLE
t262 TABLE
t263 TABLE
t264 TABLE
t265 TABLE
t266 TABLE
t267 TABLE
t268 TABLE
t269 TABLE
t270 TABLE
t271 TABLE
t272 TABLE
t273 TABLE
t274 TABLE
t275 TABLE
t276 TABLE
t277 TABLE
t278 TABLE
t279 TABLE
t280 TABLE
t281 TABLE
t282 TABLE
t283 TABLE
t284 TABLE
t285 TABLE
t286 TABLE
t287 TABLE
t288 TABLE
t289 TABLE
t290 TABLE
t291 TABLE
t292 TABLE
t293 TABLE
t294 TABLE
t295 TABLE
t296 TABLE
t297 TABLE
t298 TABLE
t299 TABLE
t300 TABLE
t301 TABLE
t302 TABLE
t303 TABLE
t304 TABLE
t305 TABLE
t306 TABLE
t307 TABLE
t308 TABLE
t309 TABLE
t310 TABLE
t311 TABLE
t312 TABLE
t313 TABLE
t314 TABLE
t315 TABLE
t316 TABLE
t317 TABLE
t318 TABLE
t319 TABLE
t320 TABLE
t321 TABLE
t322 TABLE
t323 TABLE
t324 TABLE
t325 TABLE
t326 TABLE
t327 TABLE
t328 TABLE
t329 TABLE
t330 TABLE
t331 TABLE
t332 TABLE
t333 TABLE
t334 TABLE
t335 TABLE
t336 TABLE
t337 TABLE
t338 TABLE
t339 TABLE
t340 TABLE
t341 TABLE
t342 TABLE
t343 TABLE
t344 TABLE
t345 TABLE
t346 TABLE
t347 TABLE
t348 TABLE
t349 TABLE
t350 TABLE
t351 TABLE
t352 TABLE
t353 TABLE
t354 TABLE
t355 TABLE
t356 TABLE
t357 TABLE
t358 TABLE
t359 TABLE
t360 TABLE
t361 TABLE
t362 TABLE
t363 TABLE
t364 TABLE
t365 TABLE
t366 TABLE
t367 TABLE
t368 TABLE
t369 TABLE
t370 TABLE
t371 TABLE
t372 TABLE
t373 TABLE
t374 TABLE
t375 TABLE
t376 TABLE
t377 TABLE
t378 TABLE
t379 TABLE
t380 TABLE
t381 TABLE
t382 TABLE
t383 TABLE
t384 TABLE
t385 TABLE
t386 TABLE
t387 TABLE
t388 TABLE
t389 TABLE
t390 TABLE
t391 TABLE
t392 TABLE
t393 TABLE
t394 TABLE
t395 TABLE
t396 TABLE
t397 TABLE
t398 TABLE
t399 TABLE
DROP TABLE t1;
storage/connect/mysql-test/connect/r/unsigned.result
0 → 100644
View file @
4dafdf16
#
# Testing unsigned types
#
DROP TABLE IF EXISTS t1;
Warnings:
Note 1051 Unknown table 'test.t1'
CREATE TABLE t1 (
a TINYINT UNSIGNED NOT NULL,
b SMALLINT ZEROFILL NOT NULL,
c INT UNSIGNED NOT NULL,
d BIGINT UNSIGNED NOT NULL,
e CHAR(32) NOT NULL DEFAULT '???') ENGINE=CONNECT TABLE_TYPE=FIX;
Warnings:
Warning 1105 No file name. Table will use t1.fix
DESCRIBE t1;
Field Type Null Key Default Extra
a tinyint(3) unsigned NO NULL
b smallint(5) unsigned zerofill NO NULL
c int(10) unsigned NO NULL
d bigint(20) unsigned NO NULL
e char(32) NO ???
INSERT INTO t1(a,b,c,d) VALUES(255,65535,4294967295,18446744073709551615);
SELECT * FROM t1;
a b c d e
255 65535 4294967295 18446744073709551615 ???
UPDATE t1 SET e = d;
SELECT * FROM t1;
a b c d e
255 65535 4294967295 18446744073709551615 18446744073709551615
UPDATE t1 SET c = d;
Warnings:
Warning 1264 Out of range value for column 'c' at row 1
SELECT * FROM t1;
a b c d e
255 65535 4294967295 18446744073709551615 18446744073709551615
UPDATE t1 SET c = e;
Warnings:
Warning 1264 Out of range value for column 'c' at row 1
SELECT * FROM t1;
a b c d e
255 65535 4294967295 18446744073709551615 18446744073709551615
UPDATE t1 SET d = e;
SELECT * FROM t1;
a b c d e
255 65535 4294967295 18446744073709551615 18446744073709551615
DROP TABLE IF EXISTS t2;
Warnings:
Note 1051 Unknown table 'test.t2'
CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=PROXY TABNAME=t1;
DESCRIBE t2;
Field Type Null Key Default Extra
a tinyint(3) unsigned NO NULL
b smallint(5) unsigned zerofill NO NULL
c int(10) unsigned NO NULL
d bigint(20) unsigned NO NULL
e char(32) NO NULL
SELECT * FROM t2;
a b c d e
255 65535 4294967295 18446744073709551615 18446744073709551615
DROP TABLE t2;
DROP TABLE t1;
storage/connect/mysql-test/connect/r/xml.result
View file @
4dafdf16
...
...
@@ -413,7 +413,7 @@ DROP TABLE t1;
SET @a=LOAD_FILE('MYSQLD_DATADIR/test/t1.xml');
SELECT CAST(@a AS CHAR CHARACTER SET latin1);
CAST(@a AS CHAR CHARACTER SET latin1) <?xml version="1.0" encoding="iso-8859-1"?>
<!-- Created by CONNECT Version 1.01.00
09 October 29
, 2013 -->
<!-- Created by CONNECT Version 1.01.00
10 November 30
, 2013 -->
<t1>
<line>
<node>ÀÁÂÃ</node>
...
...
storage/connect/mysql-test/connect/r/xml_mdev5261.result
0 → 100644
View file @
4dafdf16
Warnings:
Warning 1105 No file name. Table will use t1.xml
SET NAMES utf8;
CREATE TABLE t1 (i INT UNIQUE NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='Rownode=N';
ERROR HY000: Table type XML is not indexable
CREATE TABLE t1 (i INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=XML FILE_NAME='xt1.xml' OPTION_LIST='Rownode=N';
DESCRIBE t1;
Field Type Null Key Default Extra
i int(11) NO NULL
ALTER TABLE t1 ADD UNIQUE(i);
ERROR HY000: Table type XML is not indexable
CREATE UNIQUE INDEX i ON t1(i);
ERROR HY000: Table type XML is not indexable
DESCRIBE t1;
Field Type Null Key Default Extra
i int(11) NO NULL
INSERT INTO t1 VALUES(2),(5),(7);
SELECT * FROM t1 WHERE i = 5;
i
5
ALTER TABLE t1 DROP INDEX i;
ERROR 42000: Can't DROP 'i'; check that column/key exists
DROP INDEX i ON t1;
ERROR 42000: Can't DROP 'i'; check that column/key exists
DROP TABLE t1;
storage/connect/mysql-test/connect/std_data/test.sqlite3
View file @
4dafdf16
No preview for this file type
storage/connect/mysql-test/connect/t/have_libxml2.inc
0 → 100644
View file @
4dafdf16
--
disable_query_log
--
error
0
,
ER_UNKNOWN_ERROR
CREATE
TABLE
t1
(
a
VARCHAR
(
10
))
ENGINE
=
CONNECT
TABLE_TYPE
=
XML
OPTION_LIST
=
'xmlsup=libxml2'
;
if
(
!
`SELECT count(*) FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'
AND ENGINE='CONNECT'
AND CREATE_OPTIONS LIKE '%`
table_type
`=XML%'
AND CREATE_OPTIONS LIKE '%xmlsup=libxml2%'`
)
{
DROP
TABLE
IF
EXISTS
t1
;
Skip
Need
LIBXML2
;
}
DROP
TABLE
t1
;
--
enable_query_log
storage/connect/mysql-test/connect/t/have_odbc.inc
0 → 100644
View file @
4dafdf16
--
disable_query_log
--
error
0
,
ER_UNKNOWN_ERROR
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CATFUNC
=
Drivers
;
if
(
$mysql_errno
)
{
Skip
No
ODBC
support
;
}
DROP
TABLE
t1
;
--
enable_query_log
storage/connect/mysql-test/connect/t/have_odbc_postgresql.inc
0 → 100644
View file @
4dafdf16
--
disable_query_log
--
error
0
,
ER_UNKNOWN_ERROR
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CATFUNC
=
Sources
;
if
(
$mysql_errno
)
{
Skip
No
ODBC
support
;
}
if
(
!
`SELECT count(*) FROM t1 WHERE Name='ConnectEnginePostgresql'`
)
{
DROP
TABLE
t1
;
Skip
Need
ODBC
data
source
ConnectEnginePostgresql
;
}
SHOW
CREATE
TABLE
t1
;
DROP
TABLE
t1
;
--
enable_query_log
storage/connect/mysql-test/connect/t/mysql.test
View file @
4dafdf16
...
...
@@ -434,3 +434,23 @@ SELECT * FROM t2;
--
echo
# End of mysqldump ------
DROP
TABLE
t2
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# Testing getting unsigned types
--
echo
#
CREATE
TABLE
t1
(
a
TINYINT
UNSIGNED
NOT
NULL
,
b
SMALLINT
ZEROFILL
NOT
NULL
,
c
INT
UNSIGNED
NOT
NULL
,
d
BIGINT
UNSIGNED
NOT
NULL
,
e
CHAR
(
32
)
NOT
NULL
DEFAULT
'Hello'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
FIX
;
DESCRIBE
t1
;
INSERT
INTO
t1
(
a
,
b
,
c
,
d
)
VALUES
(
255
,
65535
,
4294967295
,
18446744073709551615
);
SELECT
*
FROM
t1
;
CREATE
TABLE
t2
ENGINE
=
CONNECT
TABLE_TYPE
=
MYSQL
TABNAME
=
t1
;
DESCRIBE
t2
;
SELECT
*
FROM
t2
;
DROP
TABLE
t2
;
DROP
TABLE
t1
;
storage/connect/mysql-test/connect/t/odbc.test
0 → 100644
View file @
4dafdf16
--
source
have_odbc
.
inc
SET
NAMES
utf8
;
# MS ODBC and unixODBC return different error message text,
# so disable displaying error messages
--
disable_result_log
ONCE
--
error
ER_UNKNOWN_ERROR
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'Bad connection string'
;
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CATFUNC
=
Sources
;
SHOW
CREATE
TABLE
t1
;
DROP
TABLE
t1
;
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CATFUNC
=
Drivers
;
SHOW
CREATE
TABLE
t1
;
DROP
TABLE
t1
;
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CATFUNC
=
Tables
CONNECTION
=
'Not important'
;
SHOW
CREATE
TABLE
t1
;
DROP
TABLE
t1
;
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CATFUNC
=
Columns
CONNECTION
=
'Not important'
;
SHOW
CREATE
TABLE
t1
;
DROP
TABLE
t1
;
storage/connect/mysql-test/connect/t/odbc_postgresql.sql
0 → 100644
View file @
4dafdf16
--
-- The SQL script to create PostgreSQL data for odbc_postgresql.test
--
-- Run this script as a admin user:
-- psql -U postgres < odbc_postgresql.sql
SET
NAMES
'UTF8'
;
DROP
DATABASE
IF
EXISTS
mtr
;
DROP
USER
IF
EXISTS
mtr
;
CREATE
USER
mtr
WITH
PASSWORD
'mtr'
;
CREATE
DATABASE
mtr
OWNER
=
mtr
ENCODING
=
'UTF8'
;
GRANT
ALL
ON
DATABASE
mtr
TO
mtr
;
\
c
mtr
SET
role
mtr
;
CREATE
TABLE
t1
(
a
INT
NOT
NULL
);
INSERT
INTO
t1
VALUES
(
10
),(
20
),(
30
);
CREATE
VIEW
v1
AS
SELECT
*
FROM
t1
;
CREATE
TABLE
t2
(
a
INT
NOT
NULL
);
INSERT
INTO
t2
VALUES
(
40
),(
50
),(
60
);
CREATE
SCHEMA
schema1
AUTHORIZATION
mtr
;
CREATE
TABLE
schema1
.
t1
(
a
CHAR
(
10
)
NOT
NULL
);
INSERT
INTO
schema1
.
t1
VALUES
(
'aaa'
),(
'bbb'
),(
'ccc'
),(
'яяя'
);
CREATE
VIEW
schema1
.
v1
AS
SELECT
*
FROM
schema1
.
t1
;
CREATE
TABLE
schema1
.
t2
(
a
CHAR
(
10
)
NOT
NULL
);
INSERT
INTO
schema1
.
t2
VALUES
(
'xxx'
),(
'yyy'
),(
'zzz'
),(
'ÄÖÜ'
);
storage/connect/mysql-test/connect/t/odbc_postgresql.test
0 → 100644
View file @
4dafdf16
--
source
have_odbc_postgresql
.
inc
#--source include/not_embedded.inc
#
# To configure your system to be able to run this test,
# follow through the following steps:
#
# 1. Install and configure PostgreSQL database to stat on the system startup
#
# 2. Create user, database, schema and tables to be used by mtr:
# psql -U postgres < odbc_postgresql.sql
#
# 3. Install PostgreSQL ODBC Driver.
# - On CentOS, Fedora:
# sudo yum install postgresql-odbc
# - On Ubuntu, Debian:
# sudo apt-get install odbc-postgresql
#
# 4. Create a data source with the name "ConnectEnginePostgresql"
# - On Windows: use odbcadm.exe
# - On Linux: put these lines into /etc/odbc.ini
#
#[ConnectEnginePostgresql]
#Description=PostgreSQL DSN for ConnectSE
#Driver=PostgreSQL
#Database=mtr
#Servername=localhost
#Port=5432
#
SET
NAMES
utf8
;
--
echo
#
--
echo
# Checking CATFUNC=Tables
--
echo
#
--
echo
--
echo
# All tables in all schemas
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# All tables in all schemas
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
TABNAME
=
'%.%.%'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# All tables in all schemas
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
TABNAME
=
'%.%'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# All tables in the default schema ("public")
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
TABNAME
=
'%'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# All tables "t1" in all schemas
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
TABNAME
=
'%.%.t1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# All tables "t1" in all schemas
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
TABNAME
=
'%.t1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# Table "t1" in the default schema ("public")
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
TABNAME
=
't1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# Table "t1" in the schema "public"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
TABNAME
=
'%.public.t1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# Table "t1" in the schema "schema1"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
TABNAME
=
'%.schema1.t1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# All tables "t1" in all schemas (Catalog name is ignored by PostgreSQL)
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Tables
TABNAME
=
'xxx.%.t1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# Checking CATFUNC=Columns
--
echo
#
--
echo
#
# For some reasons SQLColumn (unlike SQLTables) include columns of system
# tables from the schemas like "information_schema", "pg_catalog", "pg_toast".
# So we add the "Table_Owner IN ('public','schema1')" clause into some queries.
#
--
echo
# All columns in the schemas "public" and "schema1"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Columns
;
SELECT
*
FROM
t1
WHERE
Table_Owner
IN
(
'public'
,
'schema1'
)
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# All columns in the schemas "public" and "schema1"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Columns
TABNAME
=
'%.%.%'
;
SELECT
*
FROM
t1
WHERE
Table_Owner
IN
(
'public'
,
'schema1'
)
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# All tables "t1" in all schemas
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Columns
TABNAME
=
'%.%.t1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# Table "t1" in the schema "public"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Columns
TABNAME
=
'%.public.t1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# Table "t1" in the schema "schema1"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Columns
TABNAME
=
'%.schema1.t1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
# All tables "t1" in all schemas (Catalog name is ignored by PostgreSQL)
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
CATFUNC
=
Columns
TABNAME
=
'xxx.%.t1'
;
SELECT
*
FROM
t1
ORDER
BY
Table_Owner
,
Table_Name
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# Checking tables
--
echo
#
--
echo
--
echo
# Table "t1" in the default schema ("public")
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
;
SHOW
CREATE
TABLE
t1
;
SELECT
*
FROM
t1
;
CREATE
TABLE
t2
AS
SELECT
*
FROM
t1
;
SHOW
CREATE
TABLE
t2
;
SELECT
*
FROM
t2
;
DROP
TABLE
t2
;
CREATE
VIEW
v1
AS
SELECT
*
FROM
t1
;
SELECT
*
FROM
v1
;
DROP
VIEW
v1
;
DROP
TABLE
t1
;
--
echo
# Table "t1" in the schema "public"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABNAME
=
'public.t1'
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
;
SHOW
CREATE
TABLE
t1
;
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
--
echo
# Table "t1" in the schema "schema1"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABNAME
=
'schema1.t1'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
;
SHOW
CREATE
TABLE
t1
;
SELECT
*
FROM
t1
;
CREATE
TABLE
t2
AS
SELECT
*
FROM
t1
;
SHOW
CREATE
TABLE
t2
;
SELECT
*
FROM
t2
;
DROP
TABLE
t2
;
CREATE
VIEW
v1
AS
SELECT
*
FROM
t1
;
SELECT
*
FROM
v1
;
DROP
VIEW
v1
;
DROP
TABLE
t1
;
--
echo
# View "v1" in the schema "schema1"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABNAME
=
'schema1.v1'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
;
SHOW
CREATE
TABLE
t1
;
SELECT
*
FROM
t1
;
CREATE
TABLE
t2
AS
SELECT
*
FROM
t1
;
SHOW
CREATE
TABLE
t2
;
SELECT
*
FROM
t2
;
DROP
TABLE
t2
;
CREATE
VIEW
v1
AS
SELECT
*
FROM
t1
;
SELECT
*
FROM
v1
;
DROP
VIEW
v1
;
DROP
TABLE
t1
;
--
echo
# Table "t2" in the schema "schema1"
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABNAME
=
'schema1.t2'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
TABLE_TYPE
=
ODBC
CONNECTION
=
'DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'
;
SHOW
CREATE
TABLE
t1
;
SELECT
*
FROM
t1
;
CREATE
TABLE
t2
AS
SELECT
*
FROM
t1
;
SHOW
CREATE
TABLE
t2
;
SELECT
*
FROM
t2
;
DROP
TABLE
t2
;
CREATE
VIEW
v1
AS
SELECT
*
FROM
t1
;
SELECT
*
FROM
v1
;
DROP
VIEW
v1
;
DROP
TABLE
t1
;
storage/connect/mysql-test/connect/t/odbc_sqlite3.test
View file @
4dafdf16
--
source
have_odbc_sqlite3
.
inc
#
# To run this test, install SQLite3 ODBC Driver from
# http://www.ch-werner.de/sqliteodbc/
#
# Note, the test does not need a DSN to be created
# (only the driver is required)
#
#
# On Windows:
# -----------
# Download and run the installer file sqliteodbc.exe
# Version sqliteodbc-0.991 is known to Work.
# After running the installer the test should start working automatically.
#
# On Linux:
# --------
# 1. Download the source tarball, e.g.: sqliteodbc-0.993.tar.gz
# 2. Unpack the sources:
# tar -zxf sqliteodbc-0.993.tar.gz
# 3. Compile the source and install:
# cd sqliteodbc-0.993
# ./configure --prefix=/opt/sqliteodbc
# make
# sudo make install
#
# (you can use a different --prefix, according to your preferences)
#
# 4. Add these lines into /etc/odbcinst.ini
#
#[SQLite3 ODBC Driver]
#Description=SQLite3 ODBC Driver
#Driver=/opt/sqliteodbc/libsqlite3odbc.so
#Setup=/opt/sqliteodbc/libsqlite3odbc.so
#
# Adjust the directory "/opt/sqliteodbc/" according to --prefix
# that you chose on step #3.
#
#
SET
NAMES
utf8
;
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
#
# For some reasons Windows does not allow to remove the data base
# file after "DROP TABLE t1". So unlike in odbc_xls.test we won't copy
# the data file, we'll use directly the file in std_data.
# As we do not do any modifications in the database, this should be OK.
#
let
$Database
=
$MTR_SUITE_DIR
/
std_data
/
test
.
sqlite3
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'Driver=SQLite3 ODBC Driver;Database=$Database;NoWCHAR=yes'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
SHOW
CREATE
TABLE
t1
;
SELECT
*
FROM
t1
;
CREATE
TABLE
t2
AS
SELECT
*
FROM
t1
;
SHOW
CREATE
TABLE
t2
;
SELECT
*
FROM
t2
;
DROP
TABLE
t2
;
CREATE
VIEW
v1
AS
SELECT
*
FROM
t1
;
SELECT
*
FROM
v1
;
DROP
VIEW
v1
;
DROP
TABLE
t1
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
CATFUNC
=
Columns
TABNAME
=
't1'
TABLE_TYPE
=
ODBC
CONNECTION
=
'Driver=SQLite3 ODBC Driver;Database=$Database;NoWCHAR=yes'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
CATFUNC
=
Tables
TABNAME
=
't1'
TABLE_TYPE
=
ODBC
CONNECTION
=
'Driver=SQLite3 ODBC Driver;Database=$Database;NoWCHAR=yes'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
--
source
have_odbc_sqlite3
.
inc
#
# To run this test, install SQLite3 ODBC Driver from
# http://www.ch-werner.de/sqliteodbc/
#
# Note, the test does not need a DSN to be created
# (only the driver is required)
#
#
# On Windows:
# -----------
# Download and run the installer file sqliteodbc.exe
# Version sqliteodbc-0.991 is known to Work.
# After running the installer the test should start working automatically.
#
# On Linux:
# --------
# 1. Download the source tarball, e.g.: sqliteodbc-0.993.tar.gz
# 2. Unpack the sources:
# tar -zxf sqliteodbc-0.993.tar.gz
# 3. Compile the source and install:
# cd sqliteodbc-0.993
# ./configure --prefix=/opt/sqliteodbc
# make
# sudo make install
#
# (you can use a different --prefix, according to your preferences)
#
# 4. Add these lines into /etc/odbcinst.ini
#
#[SQLite3 ODBC Driver]
#Description=SQLite3 ODBC Driver
#Driver=/opt/sqliteodbc/libsqlite3odbc.so
#Setup=/opt/sqliteodbc/libsqlite3odbc.so
#
# Adjust the directory "/opt/sqliteodbc/" according to --prefix
# that you chose on step #3.
#
#
SET
NAMES
utf8
;
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
#
# For some reasons Windows does not allow to remove the data base
# file after "DROP TABLE t1". So unlike in odbc_xls.test we won't copy
# the data file, we'll use directly the file in std_data.
# As we do not do any modifications in the database, this should be OK.
#
let
$Database
=
$MTR_SUITE_DIR
/
std_data
/
test
.
sqlite3
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
ODBC
CONNECTION
=
'Driver=SQLite3 ODBC Driver;Database=$Database;NoWCHAR=yes'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
SHOW
CREATE
TABLE
t1
;
SELECT
*
FROM
t1
;
CREATE
TABLE
t2
AS
SELECT
*
FROM
t1
;
SHOW
CREATE
TABLE
t2
;
SELECT
*
FROM
t2
;
DROP
TABLE
t2
;
CREATE
VIEW
v1
AS
SELECT
*
FROM
t1
;
SELECT
*
FROM
v1
;
DROP
VIEW
v1
;
DROP
TABLE
t1
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
CATFUNC
=
Columns
TABNAME
=
't1'
TABLE_TYPE
=
ODBC
CONNECTION
=
'Driver=SQLite3 ODBC Driver;Database=$Database;NoWCHAR=yes'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
CATFUNC
=
Tables
TABNAME
=
't1'
TABLE_TYPE
=
ODBC
CONNECTION
=
'Driver=SQLite3 ODBC Driver;Database=$Database;NoWCHAR=yes'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
CATFUNC
=
Columns
TABLE_TYPE
=
ODBC
CONNECTION
=
'Driver=SQLite3 ODBC Driver;Database=$Database;NoWCHAR=yes'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
SELECT
*
FROM
t1
ORDER
BY
Table_name
;
DROP
TABLE
t1
;
--
replace_result
$MTR_SUITE_DIR
MTR_SUITE_DIR
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
CATFUNC
=
Tables
TABLE_TYPE
=
ODBC
CONNECTION
=
'Driver=SQLite3 ODBC Driver;Database=$Database;NoWCHAR=yes'
CHARSET
=
utf8
DATA_CHARSET
=
utf8
SELECT
*
FROM
t1
ORDER
BY
Table_name
;
DROP
TABLE
t1
;
storage/connect/mysql-test/connect/t/unsigned.test
0 → 100644
View file @
4dafdf16
--
echo
#
--
echo
# Testing unsigned types
--
echo
#
DROP
TABLE
IF
EXISTS
t1
;
CREATE
TABLE
t1
(
a
TINYINT
UNSIGNED
NOT
NULL
,
b
SMALLINT
ZEROFILL
NOT
NULL
,
c
INT
UNSIGNED
NOT
NULL
,
d
BIGINT
UNSIGNED
NOT
NULL
,
e
CHAR
(
32
)
NOT
NULL
DEFAULT
'???'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
FIX
;
DESCRIBE
t1
;
INSERT
INTO
t1
(
a
,
b
,
c
,
d
)
VALUES
(
255
,
65535
,
4294967295
,
18446744073709551615
);
SELECT
*
FROM
t1
;
UPDATE
t1
SET
e
=
d
;
SELECT
*
FROM
t1
;
UPDATE
t1
SET
c
=
d
;
SELECT
*
FROM
t1
;
UPDATE
t1
SET
c
=
e
;
SELECT
*
FROM
t1
;
UPDATE
t1
SET
d
=
e
;
SELECT
*
FROM
t1
;
DROP
TABLE
IF
EXISTS
t2
;
CREATE
TABLE
t2
ENGINE
=
CONNECT
TABLE_TYPE
=
PROXY
TABNAME
=
t1
;
DESCRIBE
t2
;
SELECT
*
FROM
t2
;
# Moved to mysql.test (cannot be executed if embedded)
#DROP TABLE t2;
#CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL TABNAME=t1;
#DESCRIBE t2;
#SELECT * FROM t2;
DROP
TABLE
t2
;
DROP
TABLE
t1
;
storage/connect/mysql-test/connect/t/xml.test
View file @
4dafdf16
--
disable_query_log
--
error
0
,
ER_UNKNOWN_ERROR
CREATE
TABLE
t1
(
a
VARCHAR
(
10
))
ENGINE
=
CONNECT
TABLE_TYPE
=
XML
OPTION_LIST
=
'xmlsup=libxml2'
;
if
(
!
`SELECT count(*) FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'
AND ENGINE='CONNECT'
AND CREATE_OPTIONS LIKE '%`
table_type
`=XML%'
AND CREATE_OPTIONS LIKE '%xmlsup=libxml2%'`
)
{
Skip
Need
LIBXML2
;
}
DROP
TABLE
t1
;
--
enable_query_log
--
source
have_libxml2
.
inc
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
...
...
storage/connect/mysql-test/connect/t/xml_grant.test
View file @
4dafdf16
--
source
include
/
not_embedded
.
inc
--
disable_query_log
--
error
0
,
ER_UNKNOWN_ERROR
CREATE
TABLE
t1
(
a
VARCHAR
(
10
))
ENGINE
=
CONNECT
TABLE_TYPE
=
XML
OPTION_LIST
=
'xmlsup=libxml2'
;
if
(
!
`SELECT count(*) FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'
AND ENGINE='CONNECT'
AND CREATE_OPTIONS LIKE '%`
table_type
`=XML%'
AND CREATE_OPTIONS LIKE '%xmlsup=libxml2%'`
)
{
Skip
Need
LIBXML2
;
}
DROP
TABLE
t1
;
--
enable_query_log
--
source
have_libxml2
.
inc
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
...
...
storage/connect/mysql-test/connect/t/xml_mdev5261.test
0 → 100644
View file @
4dafdf16
--
source
have_libxml2
.
inc
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
SET
NAMES
utf8
;
#
#--echo Testing indexing on not indexable table type
#
--
error
ER_UNKNOWN_ERROR
CREATE
TABLE
t1
(
i
INT
UNIQUE
NOT
NULL
)
ENGINE
=
CONNECT
TABLE_TYPE
=
XML
FILE_NAME
=
'xt1.xml'
OPTION_LIST
=
'Rownode=N'
;
CREATE
TABLE
t1
(
i
INT
NOT
NULL
)
ENGINE
=
CONNECT
TABLE_TYPE
=
XML
FILE_NAME
=
'xt1.xml'
OPTION_LIST
=
'Rownode=N'
;
DESCRIBE
t1
;
# one could *add* an index to an existing table
--
error
ER_UNKNOWN_ERROR
ALTER
TABLE
t1
ADD
UNIQUE
(
i
);
--
error
ER_UNKNOWN_ERROR
CREATE
UNIQUE
INDEX
i
ON
t1
(
i
);
DESCRIBE
t1
;
INSERT
INTO
t1
VALUES
(
2
),(
5
),(
7
);
SELECT
*
FROM
t1
WHERE
i
=
5
;
--
error
ER_CANT_DROP_FIELD_OR_KEY
ALTER
TABLE
t1
DROP
INDEX
i
;
--
error
ER_CANT_DROP_FIELD_OR_KEY
DROP
INDEX
i
ON
t1
;
DROP
TABLE
t1
;
--
remove_file
$MYSQLD_DATADIR
/
test
/
xt1
.
xml
storage/connect/myutil.cpp
View file @
4dafdf16
...
...
@@ -84,7 +84,7 @@ int MYSQLtoPLG(char *typname, char *var)
/************************************************************************/
/* Convert from PlugDB type to MySQL type number */
/************************************************************************/
enum
enum_field_types
PLGtoMYSQL
(
int
type
,
bool
dbf
)
enum
enum_field_types
PLGtoMYSQL
(
int
type
,
bool
dbf
,
char
v
)
{
enum
enum_field_types
mytype
;
...
...
@@ -99,10 +99,14 @@ enum enum_field_types PLGtoMYSQL(int type, bool dbf)
mytype
=
MYSQL_TYPE_DOUBLE
;
break
;
case
TYPE_DATE
:
mytype
=
(
dbf
)
?
MYSQL_TYPE_DATE
:
MYSQL_TYPE_DATETIME
;
mytype
=
(
dbf
)
?
MYSQL_TYPE_DATE
:
(
v
==
'S'
)
?
MYSQL_TYPE_TIMESTAMP
:
(
v
==
'D'
)
?
MYSQL_TYPE_NEWDATE
:
(
v
==
'T'
)
?
MYSQL_TYPE_TIME
:
(
v
==
'Y'
)
?
MYSQL_TYPE_YEAR
:
MYSQL_TYPE_DATETIME
;
break
;
case
TYPE_STRING
:
mytype
=
MYSQL_TYPE_VARCHAR
;
mytype
=
(
v
)
?
MYSQL_TYPE_VARCHAR
:
MYSQL_TYPE_STRING
;
break
;
case
TYPE_BIGINT
:
mytype
=
MYSQL_TYPE_LONGLONG
;
...
...
@@ -138,12 +142,12 @@ const char *PLGtoMYSQLtype(int type, bool dbf, char v)
}
// endswitch mytype
return
"CHAR(0)"
;
}
// end of PLGtoMYSQL
}
// end of PLGtoMYSQL
type
/************************************************************************/
/* Convert from MySQL type to PlugDB type number */
/************************************************************************/
int
MYSQLtoPLG
(
int
mytype
)
int
MYSQLtoPLG
(
int
mytype
,
char
*
var
)
{
int
type
;
...
...
@@ -177,7 +181,6 @@ int MYSQLtoPLG(int mytype)
case
MYSQL_TYPE_TIME
:
type
=
TYPE_DATE
;
break
;
case
MYSQL_TYPE_STRING
:
case
MYSQL_TYPE_VAR_STRING
:
#if !defined(ALPHA)
case
MYSQL_TYPE_VARCHAR
:
...
...
@@ -186,6 +189,8 @@ int MYSQLtoPLG(int mytype)
case
MYSQL_TYPE_TINY_BLOB
:
case
MYSQL_TYPE_MEDIUM_BLOB
:
case
MYSQL_TYPE_LONG_BLOB
:
if
(
var
)
*
var
=
'V'
;
case
MYSQL_TYPE_STRING
:
type
=
TYPE_STRING
;
break
;
default:
...
...
storage/connect/myutil.h
View file @
4dafdf16
...
...
@@ -4,10 +4,10 @@
#ifndef __MYUTIL__H
#define __MYUTIL__H
enum
enum_field_types
PLGtoMYSQL
(
int
type
,
bool
dbf
);
const
char
*
PLGtoMYSQLtype
(
int
type
,
bool
dbf
,
char
var
=
NULL
);
enum
enum_field_types
PLGtoMYSQL
(
int
type
,
bool
dbf
,
char
var
=
0
);
const
char
*
PLGtoMYSQLtype
(
int
type
,
bool
dbf
,
char
var
=
0
);
int
MYSQLtoPLG
(
char
*
typname
,
char
*
var
=
NULL
);
int
MYSQLtoPLG
(
int
mytype
);
int
MYSQLtoPLG
(
int
mytype
,
char
*
var
=
NULL
);
char
*
MyDateFmt
(
int
mytype
);
char
*
MyDateFmt
(
char
*
typname
);
...
...
storage/connect/odbconn.cpp
View file @
4dafdf16
...
...
@@ -121,7 +121,7 @@ int TranslateSQLType(int stp, int prec, int& len, char& v)
case
SQL_LONGVARCHAR
:
// (-1)
v
=
'V'
;
type
=
TYPE_STRING
;
len
=
min
(
abs
(
len
),
25
5
);
len
=
min
(
abs
(
len
),
25
6
);
break
;
case
SQL_NUMERIC
:
// 2
case
SQL_DECIMAL
:
// 3
...
...
@@ -226,10 +226,10 @@ static CATPARM *AllocCatInfo(PGLOBAL g, CATINFO fid, char *tab, PQRYRES qrp)
cap
->
Id
=
fid
;
cap
->
Qrp
=
qrp
;
cap
->
Tab
=
(
PUCHAR
)
tab
;
cap
->
Vlen
=
(
SQLLEN
*
*
)
PlugSubAlloc
(
g
,
NULL
,
n
*
sizeof
(
S
DWORD
*
));
cap
->
Vlen
=
(
SQLLEN
*
*
)
PlugSubAlloc
(
g
,
NULL
,
n
*
sizeof
(
S
QLLEN
*
));
for
(
i
=
0
;
i
<
n
;
i
++
)
cap
->
Vlen
[
i
]
=
(
SQLLEN
*
)
PlugSubAlloc
(
g
,
NULL
,
m
*
sizeof
(
S
DWORD
));
cap
->
Vlen
[
i
]
=
(
SQLLEN
*
)
PlugSubAlloc
(
g
,
NULL
,
m
*
sizeof
(
S
QLLEN
));
cap
->
Status
=
(
UWORD
*
)
PlugSubAlloc
(
g
,
NULL
,
m
*
sizeof
(
UWORD
));
return
cap
;
...
...
@@ -540,7 +540,7 @@ PQRYRES ODBCTables(PGLOBAL g, char *dsn, char *tabpat, bool info)
FLD_TYPE
,
FLD_REM
};
static
unsigned
int
length
[]
=
{
0
,
0
,
0
,
16
,
128
};
int
n
,
ncol
=
5
;
int
maxres
;
int
maxres
;
PQRYRES
qrp
;
CATPARM
*
cap
;
ODBConn
*
ocp
=
NULL
;
...
...
@@ -557,7 +557,7 @@ PQRYRES ODBCTables(PGLOBAL g, char *dsn, char *tabpat, bool info)
if
(
ocp
->
Open
(
dsn
,
2
)
<
1
)
// 2 is openReadOnly
return
NULL
;
maxres
=
512
;
// This is completely arbitrary
maxres
=
16384
;
// This is completely arbitrary
n
=
ocp
->
GetMaxValue
(
SQL_MAX_QUALIFIER_NAME_LEN
);
length
[
0
]
=
(
n
)
?
(
n
+
1
)
:
128
;
n
=
ocp
->
GetMaxValue
(
SQL_MAX_USER_NAME_LEN
);
...
...
@@ -1123,10 +1123,10 @@ bool ODBConn::Connect(DWORD Options)
PGLOBAL
&
g
=
m_G
;
PDBUSER
dup
=
PlgGetUser
(
g
);
if
(
Options
&
noOdbcDialog
||
dup
->
Remote
)
//
if (Options & noOdbcDialog || dup->Remote)
wConnectOption
=
SQL_DRIVER_NOPROMPT
;
else
if
(
Options
&
forceOdbcDialog
)
wConnectOption
=
SQL_DRIVER_PROMPT
;
//
else if (Options & forceOdbcDialog)
//
wConnectOption = SQL_DRIVER_PROMPT;
rc
=
SQLDriverConnect
(
m_hdbc
,
hWnd
,
(
PUCHAR
)
m_Connect
,
SQL_NTS
,
ConnOut
,
MAX_CONNECT_LEN
,
...
...
@@ -1986,6 +1986,87 @@ bool ODBConn::GetDrivers(PQRYRES qrp)
return
rv
;
}
// end of GetDrivers
/**
A helper class to split an optionally qualified table name into components.
These formats are understood:
"CatalogName.SchemaName.TableName"
"SchemaName.TableName"
"TableName"
*/
class
SQLQualifiedName
{
static
const
uint
max_parts
=
3
;
/* Catalog.Schema.Table */
MYSQL_LEX_STRING
m_part
[
max_parts
];
char
m_buf
[
512
];
void
lex_string_set
(
MYSQL_LEX_STRING
*
S
,
char
*
str
,
size_t
length
)
{
S
->
str
=
str
;
S
->
length
=
length
;
}
void
lex_string_shorten_down
(
MYSQL_LEX_STRING
*
S
,
size_t
offs
)
{
DBUG_ASSERT
(
offs
<=
S
->
length
);
S
->
str
+=
offs
;
S
->
length
-=
offs
;
}
/*
Find the rightmost '.' delimiter and return the length
of the qualifier, including the rightmost '.' delimier.
For example, for the string {"a.b.c",5} it will return 4,
which is the length of the qualifier "a.b."
*/
size_t
lex_string_find_qualifier
(
MYSQL_LEX_STRING
*
S
)
{
size_t
i
;
for
(
i
=
S
->
length
;
i
>
0
;
i
--
)
{
if
(
S
->
str
[
i
-
1
]
==
'.'
)
{
S
->
str
[
i
-
1
]
=
'\0'
;
return
i
;
}
}
return
0
;
}
public:
/*
Initialize to the given optionally qualified name.
NULL pointer in "name" is supported.
*/
SQLQualifiedName
(
const
char
*
name
)
{
size_t
len
,
i
=
0
;
if
(
!
name
)
goto
ret
;
/* Initialize the first (rightmost) part */
lex_string_set
(
&
m_part
[
0
],
m_buf
,
strmake
(
m_buf
,
name
,
sizeof
(
m_buf
)
-
1
)
-
m_buf
);
/* Initialize the other parts, if exist. */
for
(
i
=
1
;
i
<
max_parts
;
i
++
)
{
if
(
!
(
len
=
lex_string_find_qualifier
(
&
m_part
[
i
-
1
])))
break
;
lex_string_set
(
&
m_part
[
i
],
m_part
[
i
-
1
].
str
,
len
-
1
);
lex_string_shorten_down
(
&
m_part
[
i
-
1
],
len
);
}
ret:
/* Initialize the remaining parts */
for
(
;
i
<
max_parts
;
i
++
)
lex_string_set
(
&
m_part
[
i
],
NULL
,
0
);
}
SQLCHAR
*
ptr
(
uint
i
)
{
DBUG_ASSERT
(
i
<
max_parts
);
return
(
SQLCHAR
*
)
(
m_part
[
i
].
length
?
m_part
[
i
].
str
:
NULL
);
}
size_t
length
(
uint
i
)
{
DBUG_ASSERT
(
i
<
max_parts
);
return
m_part
[
i
].
length
;
}
};
/***********************************************************************/
/* Allocate recset and call SQLTables, SQLColumns or SQLPrimaryKeys. */
/***********************************************************************/
...
...
@@ -2048,29 +2129,38 @@ int ODBConn::GetCatInfo(CATPARM *cap)
}
else
ThrowDBX
(
"0-sized result"
);
SQLQualifiedName
name
((
const
char
*
)
cap
->
Tab
);
// Now do call the proper ODBC API
switch
(
cap
->
Id
)
{
case
CAT_TAB
:
// rc = SQLSetStmtAttr(hstmt, SQL_ATTR_METADATA_ID,
// (SQLPOINTER)false, 0);
fnc
=
"SQLTables"
;
rc
=
SQLTables
(
hstmt
,
NULL
,
0
,
NULL
,
0
,
cap
->
Tab
,
SQL_NTS
,
cap
->
Pat
,
SQL_NTS
);
rc
=
SQLTables
(
hstmt
,
name
.
ptr
(
2
),
name
.
length
(
2
),
name
.
ptr
(
1
),
name
.
length
(
1
),
name
.
ptr
(
0
),
name
.
length
(
0
),
cap
->
Pat
,
SQL_NTS
);
break
;
case
CAT_COL
:
// rc = SQLSetStmtAttr(hstmt, SQL_ATTR_METADATA_ID,
// (SQLPOINTER)true, 0);
fnc
=
"SQLColumns"
;
rc
=
SQLColumns
(
hstmt
,
NULL
,
0
,
NULL
,
0
,
cap
->
Tab
,
SQL_NTS
,
cap
->
Pat
,
SQL_NTS
);
rc
=
SQLColumns
(
hstmt
,
name
.
ptr
(
2
),
name
.
length
(
2
),
name
.
ptr
(
1
),
name
.
length
(
1
),
name
.
ptr
(
0
),
name
.
length
(
0
),
cap
->
Pat
,
SQL_NTS
);
break
;
case
CAT_KEY
:
fnc
=
"SQLPrimaryKeys"
;
rc
=
SQLPrimaryKeys
(
hstmt
,
NULL
,
0
,
NULL
,
0
,
cap
->
Tab
,
SQL_NTS
);
rc
=
SQLPrimaryKeys
(
hstmt
,
name
.
ptr
(
2
),
name
.
length
(
2
),
name
.
ptr
(
1
),
name
.
length
(
1
),
name
.
ptr
(
0
),
name
.
length
(
0
));
break
;
case
CAT_STAT
:
fnc
=
"SQLStatistics"
;
rc
=
SQLStatistics
(
hstmt
,
NULL
,
0
,
NULL
,
0
,
cap
->
Tab
,
SQL_NTS
,
rc
=
SQLStatistics
(
hstmt
,
name
.
ptr
(
2
),
name
.
length
(
2
),
name
.
ptr
(
1
),
name
.
length
(
1
),
name
.
ptr
(
0
),
name
.
length
(
0
),
cap
->
Unique
,
cap
->
Accuracy
);
break
;
case
CAT_SPC
:
...
...
@@ -2088,7 +2178,7 @@ int ODBConn::GetCatInfo(CATPARM *cap)
if
(
m_RowsetSize
==
1
&&
cap
->
Qrp
->
Maxres
>
1
)
{
pval
=
(
PVAL
*
)
PlugSubAlloc
(
m_G
,
NULL
,
n
*
sizeof
(
PVAL
));
vlen
=
(
SQLLEN
*
)
PlugSubAlloc
(
m_G
,
NULL
,
n
*
sizeof
(
S
DWORD
*
));
vlen
=
(
SQLLEN
*
)
PlugSubAlloc
(
m_G
,
NULL
,
n
*
sizeof
(
S
QLLEN
*
));
}
// endif
// Now bind the column buffers
...
...
storage/connect/plgdbsem.h
View file @
4dafdf16
...
...
@@ -330,7 +330,9 @@ enum COLUSE {U_P = 0x01, /* the projection list. */
U_VIRTUAL
=
0x20
,
/* a VIRTUAL column */
U_NULLS
=
0x40
,
/* The column may have nulls */
U_IS_NULL
=
0x80
,
/* The column has a null value */
U_SPECIAL
=
0x100
};
/* The column is special */
U_SPECIAL
=
0x100
,
/* The column is special */
U_UNSIGNED
=
0x200
,
/* The column type is unsigned */
U_ZEROFILL
=
0x400
};
/* The column is zero filled */
/***********************************************************************/
/* DB description class and block pointer definitions. */
...
...
storage/connect/plgdbutl.cpp
View file @
4dafdf16
...
...
@@ -278,6 +278,18 @@ PQRYRES PlgAllocResult(PGLOBAL g, int ncol, int maxres, int ids,
PCOLRES
*
pcrp
,
crp
;
PQRYRES
qrp
;
// Save stack and allocation environment and prepare error return
if
(
g
->
jump_level
==
MAX_JUMP
)
{
strcpy
(
g
->
Message
,
MSG
(
TOO_MANY_JUMPS
));
return
NULL
;
}
// endif jump_level
if
(
setjmp
(
g
->
jumper
[
++
g
->
jump_level
])
!=
0
)
{
printf
(
"%s
\n
"
,
g
->
Message
);
qrp
=
NULL
;
goto
fin
;
}
// endif rc
/************************************************************************/
/* Allocate the structure used to contain the result set. */
/************************************************************************/
...
...
@@ -342,6 +354,8 @@ PQRYRES PlgAllocResult(PGLOBAL g, int ncol, int maxres, int ids,
*
pcrp
=
NULL
;
fin:
g
->
jump_level
--
;
return
qrp
;
}
// end of PlgAllocResult
...
...
storage/connect/tabdos.cpp
View file @
4dafdf16
...
...
@@ -1087,7 +1087,12 @@ void DOSCOL::ReadColumn(PGLOBAL g)
case
TYPE_SHORT
:
case
TYPE_TINY
:
case
TYPE_BIGINT
:
Value
->
SetValue_char
(
p
,
field
-
Dcm
);
if
(
Value
->
SetValue_char
(
p
,
field
-
Dcm
))
{
sprintf
(
g
->
Message
,
"Out of range value for column %s at row %d"
,
Name
,
tdbp
->
RowNumber
(
g
));
PushWarning
(
g
,
tdbp
);
}
// endif SetValue_char
break
;
case
TYPE_FLOAT
:
Value
->
SetValue_char
(
p
,
field
);
...
...
@@ -1104,7 +1109,11 @@ void DOSCOL::ReadColumn(PGLOBAL g)
}
// endswitch Buf_Type
else
Value
->
SetValue_char
(
p
,
field
);
if
(
Value
->
SetValue_char
(
p
,
field
))
{
sprintf
(
g
->
Message
,
"Out of range value for column %s at row %d"
,
Name
,
tdbp
->
RowNumber
(
g
));
PushWarning
(
g
,
tdbp
);
}
// endif SetValue_char
break
;
default:
...
...
storage/connect/tabfix.cpp
View file @
4dafdf16
...
...
@@ -375,7 +375,12 @@ void BINCOL::ReadColumn(PGLOBAL g)
Value
->
SetValue
(
*
(
double
*
)
p
);
break
;
case
'C'
:
// Text
Value
->
SetValue_char
(
p
,
Long
);
if
(
Value
->
SetValue_char
(
p
,
Long
))
{
sprintf
(
g
->
Message
,
"Out of range value for column %s at row %d"
,
Name
,
tdbp
->
RowNumber
(
g
));
PushWarning
(
g
,
tdbp
);
}
// endif SetValue_char
break
;
default:
sprintf
(
g
->
Message
,
MSG
(
BAD_BIN_FMT
),
Fmt
,
Name
);
...
...
storage/connect/table.cpp
View file @
4dafdf16
...
...
@@ -556,6 +556,15 @@ bool TDBCAT::InitCol(PGLOBAL g)
return
false
;
}
// end of InitCol
/***********************************************************************/
/* SetRecpos: Replace the table at the specified position. */
/***********************************************************************/
bool
TDBCAT
::
SetRecpos
(
PGLOBAL
g
,
int
recpos
)
{
N
=
recpos
-
1
;
return
false
;
}
// end of SetRecpos
/***********************************************************************/
/* Data Base read routine for CAT access method. */
/***********************************************************************/
...
...
storage/connect/tabmysql.cpp
View file @
4dafdf16
...
...
@@ -1284,13 +1284,18 @@ void MYSQLCOL::ReadColumn(PGLOBAL g)
htrc
(
"MySQL ReadColumn: name=%s buf=%s
\n
"
,
Name
,
buf
);
// TODO: have a true way to differenciate temporal values
if
(
strlen
(
buf
)
==
8
)
if
(
Buf_Type
==
TYPE_DATE
&&
strlen
(
buf
)
==
8
)
// This is a TIME value
p
=
strcat
(
strcpy
(
tim
,
"1970-01-01 "
),
buf
);
else
p
=
buf
;
Value
->
SetValue_char
(
p
,
strlen
(
p
));
if
(
Value
->
SetValue_char
(
p
,
strlen
(
p
)))
{
sprintf
(
g
->
Message
,
"Out of range value for column %s at row %d"
,
Name
,
tdbp
->
RowNumber
(
g
));
PushWarning
(
g
,
tdbp
);
}
// endif SetValue_char
}
else
{
if
(
Nullable
)
Value
->
SetNull
(
true
);
...
...
storage/connect/tabodbc.cpp
View file @
4dafdf16
...
...
@@ -1083,7 +1083,7 @@ void ODBCCOL::AllocateBuffers(PGLOBAL g, int rows)
}
// endelse
if
(
rows
>
1
)
StrLen
=
(
SQLLEN
*
)
PlugSubAlloc
(
g
,
NULL
,
rows
*
sizeof
(
int
));
StrLen
=
(
SQLLEN
*
)
PlugSubAlloc
(
g
,
NULL
,
rows
*
sizeof
(
SQLLEN
));
}
// end of AllocateBuffers
...
...
storage/connect/tabutil.cpp
View file @
4dafdf16
...
...
@@ -117,7 +117,7 @@ TABLE_SHARE *GetTableShare(PGLOBAL g, THD *thd, const char *db,
/************************************************************************/
/* TabColumns: constructs the result blocks containing all the columns */
/*
of the object table that will be retrieved by GetData commands.
*/
/*
description of the object table that will be retrieved by discovery.
*/
/************************************************************************/
PQRYRES
TabColumns
(
PGLOBAL
g
,
THD
*
thd
,
const
char
*
db
,
const
char
*
name
,
bool
&
info
)
...
...
@@ -128,8 +128,8 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
static
XFLD
fldtyp
[]
=
{
FLD_NAME
,
FLD_TYPE
,
FLD_TYPENAME
,
FLD_PREC
,
FLD_LENGTH
,
FLD_SCALE
,
FLD_RADIX
,
FLD_NULL
,
FLD_REM
,
FLD_NO
,
FLD_CHARSET
};
static
unsigned
int
length
[]
=
{
0
,
4
,
16
,
4
,
4
,
4
,
4
,
4
,
256
,
32
,
32
};
char
*
fld
,
*
fmt
;
static
unsigned
int
length
[]
=
{
0
,
4
,
16
,
4
,
4
,
4
,
4
,
4
,
0
,
32
,
32
};
char
*
fld
,
*
fmt
,
v
;
int
i
,
n
,
ncol
=
sizeof
(
buftyp
)
/
sizeof
(
int
);
int
len
,
type
,
prec
;
bool
mysql
;
...
...
@@ -164,6 +164,7 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
// Some columns must be renamed
for
(
i
=
0
,
crp
=
qrp
->
Colresp
;
crp
;
crp
=
crp
->
Next
)
switch
(
++
i
)
{
case
2
:
crp
->
Nulls
=
(
char
*
)
PlugSubAlloc
(
g
,
NULL
,
n
);
break
;
case
10
:
crp
->
Name
=
"Date_fmt"
;
break
;
case
11
:
crp
->
Name
=
"Collation"
;
break
;
}
// endswitch i
...
...
@@ -181,8 +182,9 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
crp
=
qrp
->
Colresp
;
// Column_Name
fld
=
(
char
*
)
fp
->
field_name
;
crp
->
Kdata
->
SetValue
(
fld
,
i
);
v
=
0
;
if
((
type
=
MYSQLtoPLG
(
fp
->
type
()))
==
TYPE_ERROR
)
{
if
((
type
=
MYSQLtoPLG
(
fp
->
type
()
,
&
v
))
==
TYPE_ERROR
)
{
sprintf
(
g
->
Message
,
"Unsupported column type %s"
,
GetTypeName
(
type
));
qrp
=
NULL
;
break
;
...
...
@@ -190,6 +192,14 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
crp
=
crp
->
Next
;
// Data_Type
crp
->
Kdata
->
SetValue
(
type
,
i
);
if
(
fp
->
flags
&
ZEROFILL_FLAG
)
crp
->
Nulls
[
i
]
=
'Z'
;
else
if
(
fp
->
flags
&
UNSIGNED_FLAG
)
crp
->
Nulls
[
i
]
=
'U'
;
else
crp
->
Nulls
[
i
]
=
v
;
crp
=
crp
->
Next
;
// Type_Name
crp
->
Kdata
->
SetValue
(
GetTypeName
(
type
),
i
);
...
...
@@ -212,10 +222,10 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
crp
->
Kdata
->
SetValue
(
len
,
i
);
crp
=
crp
->
Next
;
// Length
len
=
fp
->
field_length
;
prec
=
(
type
==
TYPE_FLOAT
)
?
fp
->
decimals
()
:
0
;
len
=
(
prec
==
31
)
?
0
:
fp
->
field_length
;
crp
->
Kdata
->
SetValue
(
len
,
i
);
prec
=
(
type
==
TYPE_FLOAT
)
?
fp
->
decimals
()
:
0
;
crp
=
crp
->
Next
;
// Scale
crp
->
Kdata
->
SetValue
(
prec
,
i
);
...
...
@@ -233,7 +243,7 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
else
crp
->
Kdata
->
Reset
(
i
);
crp
=
crp
->
Next
;
// New
crp
=
crp
->
Next
;
// New
(date format)
crp
->
Kdata
->
SetValue
((
fmt
)
?
fmt
:
(
char
*
)
""
,
i
);
crp
=
crp
->
Next
;
// New (charset)
...
...
storage/connect/user_connect.cc
View file @
4dafdf16
...
...
@@ -95,7 +95,8 @@ bool user_connect::user_init()
PDBUSER
dup
=
NULL
;
// Areasize= 64M because of VEC tables. Should be parameterisable
g
=
PlugInit
(
NULL
,
67108864
);
//g= PlugInit(NULL, 67108864);
g
=
PlugInit
(
NULL
,
134217728
);
// 128M because of embedded tests (???)
// Check whether the initialization is complete
if
(
!
g
||
!
g
->
Sarea
||
PlugSubSet
(
g
,
g
->
Sarea
,
g
->
Sarea_Size
)
...
...
storage/connect/valblk.cpp
View file @
4dafdf16
...
...
@@ -191,7 +191,7 @@ void VALBLK::ChkIndx(int n)
void
VALBLK
::
ChkTyp
(
PVAL
v
)
{
if
(
Check
&&
Type
!=
v
->
GetType
(
))
{
if
(
Check
&&
(
Type
!=
v
->
GetType
()
||
Unsigned
!=
v
->
IsUnsigned
()
))
{
PGLOBAL
&
g
=
Global
;
strcpy
(
g
->
Message
,
MSG
(
VALTYPE_NOMATCH
));
longjmp
(
g
->
jumper
[
g
->
jump_level
],
Type
);
...
...
@@ -201,7 +201,7 @@ void VALBLK::ChkTyp(PVAL v)
void
VALBLK
::
ChkTyp
(
PVBLK
vb
)
{
if
(
Check
&&
Type
!=
vb
->
GetType
(
))
{
if
(
Check
&&
(
Type
!=
vb
->
GetType
()
||
Unsigned
!=
vb
->
IsUnsigned
()
))
{
PGLOBAL
&
g
=
Global
;
strcpy
(
g
->
Message
,
MSG
(
VALTYPE_NOMATCH
));
longjmp
(
g
->
jumper
[
g
->
jump_level
],
Type
);
...
...
@@ -304,28 +304,44 @@ void TYPBLK<TYPE>::SetValue(PSZ p, int n)
longjmp
(
g
->
jumper
[
g
->
jump_level
],
Type
);
}
// endif Check
Typp
[
n
]
=
GetTypedValue
(
p
);
bool
minus
;
ulonglong
maxval
=
MaxVal
();
ulonglong
val
=
CharToNumber
(
p
,
strlen
(
p
),
maxval
,
Unsigned
,
&
minus
);
if
(
minus
&&
val
<
maxval
)
Typp
[
n
]
=
(
TYPE
)(
-
(
signed
)
val
);
else
Typp
[
n
]
=
(
TYPE
)
val
;
SetNull
(
n
,
false
);
}
// end of SetValue
template
<
class
TYPE
>
ulonglong
TYPBLK
<
TYPE
>::
MaxVal
(
void
)
{
DBUG_ASSERT
(
false
);
return
0
;}
template
<
>
int
TYPBLK
<
int
>::
GetTypedValue
(
PSZ
p
)
{
return
atol
(
p
);}
template
<
>
uint
TYPBLK
<
uint
>::
GetTypedValue
(
PSZ
p
)
{
return
(
unsigned
)
atol
(
p
);}
ulonglong
TYPBLK
<
short
>::
MaxVal
(
void
)
{
return
INT_MAX16
;}
template
<
>
short
TYPBLK
<
short
>::
GetTypedValue
(
PSZ
p
)
{
return
(
short
)
atoi
(
p
);}
ulonglong
TYPBLK
<
ushort
>::
MaxVal
(
void
)
{
return
UINT_MAX16
;}
template
<
>
ushort
TYPBLK
<
ushort
>::
GetTypedValue
(
PSZ
p
)
{
return
(
ushort
)
atoi
(
p
);}
ulonglong
TYPBLK
<
int
>::
MaxVal
(
void
)
{
return
INT_MAX32
;}
template
<
>
longlong
TYPBLK
<
longlong
>::
GetTypedValue
(
PSZ
p
)
{
return
atoll
(
p
);}
ulonglong
TYPBLK
<
uint
>::
MaxVal
(
void
)
{
return
UINT_MAX32
;}
template
<
>
ulonglong
TYPBLK
<
ulonglong
>::
GetTypedValue
(
PSZ
p
)
{
return
(
unsigned
)
atoll
(
p
);}
ulonglong
TYPBLK
<
char
>::
MaxVal
(
void
)
{
return
INT_MAX8
;}
template
<
>
double
TYPBLK
<
double
>::
GetTypedValue
(
PSZ
p
)
{
return
atof
(
p
);}
ulonglong
TYPBLK
<
uchar
>::
MaxVal
(
void
)
{
return
UINT_MAX8
;}
template
<
>
char
TYPBLK
<
char
>::
GetTypedValue
(
PSZ
p
)
{
return
(
char
)
atoi
(
p
);}
ulonglong
TYPBLK
<
longlong
>::
MaxVal
(
void
)
{
return
INT_MAX64
;}
template
<
>
u
char
TYPBLK
<
uchar
>::
GetTypedValue
(
PSZ
p
)
{
return
(
uchar
)
atoi
(
p
)
;}
u
longlong
TYPBLK
<
ulonglong
>::
MaxVal
(
void
)
{
return
ULONGLONG_MAX
;}
/***********************************************************************/
/* Set one value in a block from an array of characters. */
...
...
@@ -557,12 +573,36 @@ char *CHRBLK::GetCharValue(int n)
return
(
char
*
)
GetValPtrEx
(
n
);
}
// end of GetCharValue
/***********************************************************************/
/* Return the value of the nth element converted to tiny int. */
/***********************************************************************/
char
CHRBLK
::
GetTinyValue
(
int
n
)
{
bool
m
;
ulonglong
val
=
CharToNumber
((
char
*
)
GetValPtr
(
n
),
Long
,
INT_MAX8
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX8
)
?
(
char
)(
-
(
signed
)
val
)
:
(
char
)
val
;
}
// end of GetTinyValue
/***********************************************************************/
/* Return the value of the nth element converted to unsigned tiny int.*/
/***********************************************************************/
uchar
CHRBLK
::
GetUTinyValue
(
int
n
)
{
return
(
uchar
)
CharToNumber
((
char
*
)
GetValPtr
(
n
),
Long
,
UINT_MAX8
,
true
);
}
// end of GetTinyValue
/***********************************************************************/
/* Return the value of the nth element converted to short. */
/***********************************************************************/
short
CHRBLK
::
GetShortValue
(
int
n
)
{
return
(
short
)
atoi
((
char
*
)
GetValPtrEx
(
n
));
bool
m
;
ulonglong
val
=
CharToNumber
((
char
*
)
GetValPtr
(
n
),
Long
,
INT_MAX16
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX16
)
?
(
short
)(
-
(
signed
)
val
)
:
(
short
)
val
;
}
// end of GetShortValue
/***********************************************************************/
...
...
@@ -570,7 +610,7 @@ short CHRBLK::GetShortValue(int n)
/***********************************************************************/
ushort
CHRBLK
::
GetUShortValue
(
int
n
)
{
return
(
ushort
)
atoi
((
char
*
)
GetValPtrEx
(
n
));
return
(
ushort
)
CharToNumber
((
char
*
)
GetValPtr
(
n
),
Long
,
UINT_MAX16
,
true
);
}
// end of GetShortValue
/***********************************************************************/
...
...
@@ -578,7 +618,11 @@ ushort CHRBLK::GetUShortValue(int n)
/***********************************************************************/
int
CHRBLK
::
GetIntValue
(
int
n
)
{
return
atol
((
char
*
)
GetValPtrEx
(
n
));
bool
m
;
ulonglong
val
=
CharToNumber
((
char
*
)
GetValPtr
(
n
),
Long
,
INT_MAX32
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX32
)
?
(
int
)(
-
(
signed
)
val
)
:
(
int
)
val
;
}
// end of GetIntValue
/***********************************************************************/
...
...
@@ -586,7 +630,7 @@ int CHRBLK::GetIntValue(int n)
/***********************************************************************/
uint
CHRBLK
::
GetUIntValue
(
int
n
)
{
return
(
u
nsigned
)
atol
((
char
*
)
GetValPtrEx
(
n
));
return
(
u
int
)
CharToNumber
((
char
*
)
GetValPtr
(
n
),
Long
,
UINT_MAX32
,
true
);
}
// end of GetIntValue
/***********************************************************************/
...
...
@@ -594,7 +638,11 @@ uint CHRBLK::GetUIntValue(int n)
/***********************************************************************/
longlong
CHRBLK
::
GetBigintValue
(
int
n
)
{
return
atoll
((
char
*
)
GetValPtrEx
(
n
));
bool
m
;
ulonglong
val
=
CharToNumber
((
char
*
)
GetValPtr
(
n
),
Long
,
INT_MAX64
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX64
)
?
(
longlong
)(
-
(
signed
)
val
)
:
(
longlong
)
val
;
}
// end of GetBigintValue
/***********************************************************************/
...
...
@@ -602,8 +650,8 @@ longlong CHRBLK::GetBigintValue(int n)
/***********************************************************************/
ulonglong
CHRBLK
::
GetUBigintValue
(
int
n
)
{
return
(
unsigned
)
atoll
((
char
*
)
GetValPtrEx
(
n
));
}
// end of GetBigintValue
return
CharToNumber
((
char
*
)
GetValPtr
(
n
),
Long
,
ULONGLONG_MAX
,
true
);
}
// end of Get
U
BigintValue
/***********************************************************************/
/* Return the value of the nth element converted to double. */
...
...
@@ -613,22 +661,6 @@ double CHRBLK::GetFloatValue(int n)
return
atof
((
char
*
)
GetValPtrEx
(
n
));
}
// end of GetFloatValue
/***********************************************************************/
/* Return the value of the nth element converted to tiny int. */
/***********************************************************************/
char
CHRBLK
::
GetTinyValue
(
int
n
)
{
return
(
char
)
atoi
((
char
*
)
GetValPtrEx
(
n
));
}
// end of GetTinyValue
/***********************************************************************/
/* Return the value of the nth element converted to unsigned tiny int.*/
/***********************************************************************/
uchar
CHRBLK
::
GetUTinyValue
(
int
n
)
{
return
(
uchar
)
atoi
((
char
*
)
GetValPtrEx
(
n
));
}
// end of GetTinyValue
/***********************************************************************/
/* Set one value in a block. */
/***********************************************************************/
...
...
@@ -869,6 +901,86 @@ void STRBLK::Init(PGLOBAL g, bool check)
Global
=
g
;
}
// end of Init
/***********************************************************************/
/* Get the tiny value represented by the Strp string. */
/***********************************************************************/
char
STRBLK
::
GetTinyValue
(
int
n
)
{
bool
m
;
ulonglong
val
=
CharToNumber
(
Strp
[
n
],
strlen
(
Strp
[
n
]),
INT_MAX8
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX8
)
?
(
char
)(
-
(
signed
)
val
)
:
(
char
)
val
;
}
// end of GetTinyValue
/***********************************************************************/
/* Get the unsigned tiny value represented by the Strp string. */
/***********************************************************************/
uchar
STRBLK
::
GetUTinyValue
(
int
n
)
{
return
(
uchar
)
CharToNumber
(
Strp
[
n
],
strlen
(
Strp
[
n
]),
UINT_MAX8
,
true
);
}
// end of GetUTinyValue
/***********************************************************************/
/* Get the short value represented by the Strp string. */
/***********************************************************************/
short
STRBLK
::
GetShortValue
(
int
n
)
{
bool
m
;
ulonglong
val
=
CharToNumber
(
Strp
[
n
],
strlen
(
Strp
[
n
]),
INT_MAX16
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX16
)
?
(
short
)(
-
(
signed
)
val
)
:
(
short
)
val
;
}
// end of GetShortValue
/***********************************************************************/
/* Get the unsigned short value represented by the Strp string. */
/***********************************************************************/
ushort
STRBLK
::
GetUShortValue
(
int
n
)
{
return
(
ushort
)
CharToNumber
(
Strp
[
n
],
strlen
(
Strp
[
n
]),
UINT_MAX16
,
true
);
}
// end of GetUshortValue
/***********************************************************************/
/* Get the integer value represented by the Strp string. */
/***********************************************************************/
int
STRBLK
::
GetIntValue
(
int
n
)
{
bool
m
;
ulonglong
val
=
CharToNumber
(
Strp
[
n
],
strlen
(
Strp
[
n
]),
INT_MAX32
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX32
)
?
(
int
)(
-
(
signed
)
val
)
:
(
int
)
val
;
}
// end of GetIntValue
/***********************************************************************/
/* Get the unsigned integer value represented by the Strp string. */
/***********************************************************************/
uint
STRBLK
::
GetUIntValue
(
int
n
)
{
return
(
uint
)
CharToNumber
(
Strp
[
n
],
strlen
(
Strp
[
n
]),
UINT_MAX32
,
true
);
}
// end of GetUintValue
/***********************************************************************/
/* Get the big integer value represented by the Strp string. */
/***********************************************************************/
longlong
STRBLK
::
GetBigintValue
(
int
n
)
{
bool
m
;
ulonglong
val
=
CharToNumber
(
Strp
[
n
],
strlen
(
Strp
[
n
]),
INT_MAX64
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX64
)
?
(
-
(
signed
)
val
)
:
(
longlong
)
val
;
}
// end of GetBigintValue
/***********************************************************************/
/* Get the unsigned big integer value represented by the Strp string. */
/***********************************************************************/
ulonglong
STRBLK
::
GetUBigintValue
(
int
n
)
{
return
CharToNumber
(
Strp
[
n
],
strlen
(
Strp
[
n
]),
ULONGLONG_MAX
,
true
);
}
// end of GetUBigintValue
/***********************************************************************/
/* Set one value in a block from a value in another block. */
/***********************************************************************/
...
...
storage/connect/valblk.h
View file @
4dafdf16
...
...
@@ -45,9 +45,12 @@ class VALBLK : public BLOCK {
{
if
(
To_Nulls
)
{
To_Nulls
[
n
]
=
(
b
)
?
'*'
:
0
;}}
virtual
bool
IsNull
(
int
n
)
{
return
To_Nulls
&&
To_Nulls
[
n
];}
virtual
void
SetNullable
(
bool
b
);
virtual
bool
IsUnsigned
(
void
)
{
return
Unsigned
;}
virtual
void
Init
(
PGLOBAL
g
,
bool
check
)
=
0
;
virtual
int
GetVlen
(
void
)
=
0
;
virtual
PSZ
GetCharValue
(
int
n
);
virtual
char
GetTinyValue
(
int
n
)
=
0
;
virtual
uchar
GetUTinyValue
(
int
n
)
=
0
;
virtual
short
GetShortValue
(
int
n
)
=
0
;
virtual
ushort
GetUShortValue
(
int
n
)
=
0
;
virtual
int
GetIntValue
(
int
n
)
=
0
;
...
...
@@ -55,8 +58,6 @@ class VALBLK : public BLOCK {
virtual
longlong
GetBigintValue
(
int
n
)
=
0
;
virtual
ulonglong
GetUBigintValue
(
int
n
)
=
0
;
virtual
double
GetFloatValue
(
int
n
)
=
0
;
virtual
char
GetTinyValue
(
int
n
)
=
0
;
virtual
uchar
GetUTinyValue
(
int
n
)
=
0
;
virtual
void
ReAlloc
(
void
*
mp
,
int
n
)
{
Blkp
=
mp
;
Nval
=
n
;}
virtual
void
Reset
(
int
n
)
=
0
;
virtual
bool
SetFormat
(
PGLOBAL
g
,
PSZ
fmt
,
int
len
,
int
year
=
0
);
...
...
@@ -123,6 +124,8 @@ class TYPBLK : public VALBLK {
virtual
void
Init
(
PGLOBAL
g
,
bool
check
);
virtual
int
GetVlen
(
void
)
{
return
sizeof
(
TYPE
);}
//virtual PSZ GetCharValue(int n);
virtual
char
GetTinyValue
(
int
n
)
{
return
(
char
)
Typp
[
n
];}
virtual
uchar
GetUTinyValue
(
int
n
)
{
return
(
uchar
)
Typp
[
n
];}
virtual
short
GetShortValue
(
int
n
)
{
return
(
short
)
Typp
[
n
];}
virtual
ushort
GetUShortValue
(
int
n
)
{
return
(
ushort
)
Typp
[
n
];}
virtual
int
GetIntValue
(
int
n
)
{
return
(
int
)
Typp
[
n
];}
...
...
@@ -130,8 +133,6 @@ class TYPBLK : public VALBLK {
virtual
longlong
GetBigintValue
(
int
n
)
{
return
(
longlong
)
Typp
[
n
];}
virtual
ulonglong
GetUBigintValue
(
int
n
)
{
return
(
ulonglong
)
Typp
[
n
];}
virtual
double
GetFloatValue
(
int
n
)
{
return
(
double
)
Typp
[
n
];}
virtual
char
GetTinyValue
(
int
n
)
{
return
(
char
)
Typp
[
n
];}
virtual
uchar
GetUTinyValue
(
int
n
)
{
return
(
uchar
)
Typp
[
n
];}
virtual
void
Reset
(
int
n
)
{
Typp
[
n
]
=
0
;}
// Methods
...
...
@@ -168,9 +169,9 @@ class TYPBLK : public VALBLK {
protected:
// Specialized functions
static
ulonglong
MaxVal
(
void
);
TYPE
GetTypedValue
(
PVAL
vp
);
TYPE
GetTypedValue
(
PVBLK
blk
,
int
n
);
TYPE
GetTypedValue
(
PSZ
s
);
// Members
TYPE
*
const
&
Typp
;
...
...
@@ -189,6 +190,8 @@ class CHRBLK : public VALBLK {
virtual
void
Init
(
PGLOBAL
g
,
bool
check
);
virtual
int
GetVlen
(
void
)
{
return
Long
;}
virtual
PSZ
GetCharValue
(
int
n
);
virtual
char
GetTinyValue
(
int
n
);
virtual
uchar
GetUTinyValue
(
int
n
);
virtual
short
GetShortValue
(
int
n
);
virtual
ushort
GetUShortValue
(
int
n
);
virtual
int
GetIntValue
(
int
n
);
...
...
@@ -196,8 +199,6 @@ class CHRBLK : public VALBLK {
virtual
longlong
GetBigintValue
(
int
n
);
virtual
ulonglong
GetUBigintValue
(
int
n
);
virtual
double
GetFloatValue
(
int
n
);
virtual
char
GetTinyValue
(
int
n
);
virtual
uchar
GetUTinyValue
(
int
n
);
virtual
void
Reset
(
int
n
);
virtual
void
SetPrec
(
int
p
)
{
Ci
=
(
p
!=
0
);}
virtual
bool
IsCi
(
void
)
{
return
Ci
;}
...
...
@@ -242,15 +243,15 @@ class STRBLK : public VALBLK {
virtual
void
Init
(
PGLOBAL
g
,
bool
check
);
virtual
int
GetVlen
(
void
)
{
return
sizeof
(
PSZ
);}
virtual
PSZ
GetCharValue
(
int
n
)
{
return
Strp
[
n
];}
virtual
short
GetShortValue
(
int
n
)
{
return
(
short
)
atoi
(
Strp
[
n
]);}
virtual
ushort
GetUShortValue
(
int
n
)
{
return
(
ushort
)
atoi
(
Strp
[
n
]);}
virtual
int
GetIntValue
(
int
n
)
{
return
atol
(
Strp
[
n
]);}
virtual
uint
GetUIntValue
(
int
n
)
{
return
(
unsigned
)
atol
(
Strp
[
n
]);}
virtual
longlong
GetBigintValue
(
int
n
)
{
return
atoll
(
Strp
[
n
]);}
virtual
ulonglong
GetUBigintValue
(
int
n
)
{
return
(
unsigned
)
atoll
(
Strp
[
n
]);}
virtual
char
GetTinyValue
(
int
n
);
virtual
uchar
GetUTinyValue
(
int
n
);
virtual
short
GetShortValue
(
int
n
);
virtual
ushort
GetUShortValue
(
int
n
);
virtual
int
GetIntValue
(
int
n
);
virtual
uint
GetUIntValue
(
int
n
);
virtual
longlong
GetBigintValue
(
int
n
);
virtual
ulonglong
GetUBigintValue
(
int
n
);
virtual
double
GetFloatValue
(
int
n
)
{
return
atof
(
Strp
[
n
]);}
virtual
char
GetTinyValue
(
int
n
)
{
return
(
char
)
atoi
(
Strp
[
n
]);}
virtual
uchar
GetUTinyValue
(
int
n
)
{
return
(
uchar
)
atoi
(
Strp
[
n
]);}
virtual
void
Reset
(
int
n
)
{
Strp
[
n
]
=
NULL
;}
// Methods
...
...
storage/connect/value.cpp
View file @
4dafdf16
...
...
@@ -90,6 +90,56 @@ PSZ strlwr(PSZ s);
}
#endif // !WIN32
/***********************************************************************/
/* Get a long long number from its character representation. */
/* IN p: Pointer to the numeric string */
/* IN n: The string length */
/* IN maxval: The number max value */
/* IN un: True if the number must be unsigned */
/* OUT rc: Set to TRUE for out of range value */
/* OUT minus: Set to true if the number is negative */
/* Returned val: The resulting number */
/***********************************************************************/
ulonglong
CharToNumber
(
char
*
p
,
int
n
,
ulonglong
maxval
,
bool
un
,
bool
*
minus
,
bool
*
rc
)
{
char
*
p2
;
uchar
c
;
ulonglong
val
;
if
(
minus
)
*
minus
=
false
;
if
(
rc
)
*
rc
=
false
;
// Eliminate leading blanks or 0
for
(
p2
=
p
+
n
;
p
<
p2
&&
(
*
p
==
' '
||
*
p
==
'0'
);
p
++
)
;
// Get an eventual sign character
switch
(
*
p
)
{
case
'-'
:
if
(
un
)
{
if
(
rc
)
*
rc
=
true
;
return
0
;
}
else
{
maxval
++
;
if
(
minus
)
*
minus
=
true
;
}
// endif Unsigned
case
'+'
:
p
++
;
break
;
}
// endswitch *p
for
(
val
=
0
;
p
<
p2
&&
(
c
=
(
uchar
)(
*
p
-
'0'
))
<
10
;
p
++
)
if
(
val
>
(
maxval
-
c
)
/
10
)
{
val
=
maxval
;
if
(
rc
)
*
rc
=
true
;
break
;
}
else
val
=
val
*
10
+
c
;
return
val
;
}
// end of CharToNumber
/***********************************************************************/
/* GetTypeName: returns the PlugDB internal type name. */
/***********************************************************************/
...
...
@@ -479,6 +529,36 @@ TYPVAL<TYPE>::TYPVAL(TYPE n, int type, int prec, bool un)
Prec
=
prec
;
}
// end of TYPVAL constructor
/***********************************************************************/
/* Return unsigned max value for the type. */
/***********************************************************************/
template
<
class
TYPE
>
ulonglong
TYPVAL
<
TYPE
>::
MaxVal
(
void
)
{
DBUG_ASSERT
(
false
);
return
0
;}
template
<
>
ulonglong
TYPVAL
<
short
>::
MaxVal
(
void
)
{
return
INT_MAX16
;}
template
<
>
ulonglong
TYPVAL
<
ushort
>::
MaxVal
(
void
)
{
return
UINT_MAX16
;}
template
<
>
ulonglong
TYPVAL
<
int
>::
MaxVal
(
void
)
{
return
INT_MAX32
;}
template
<
>
ulonglong
TYPVAL
<
uint
>::
MaxVal
(
void
)
{
return
UINT_MAX32
;}
template
<
>
ulonglong
TYPVAL
<
char
>::
MaxVal
(
void
)
{
return
INT_MAX8
;}
template
<
>
ulonglong
TYPVAL
<
uchar
>::
MaxVal
(
void
)
{
return
UINT_MAX8
;}
template
<
>
ulonglong
TYPVAL
<
longlong
>::
MaxVal
(
void
)
{
return
INT_MAX64
;}
template
<
>
ulonglong
TYPVAL
<
ulonglong
>::
MaxVal
(
void
)
{
return
ULONGLONG_MAX
;}
/***********************************************************************/
/* TYPVAL GetValLen: returns the print length of the typed object. */
/***********************************************************************/
...
...
@@ -556,45 +636,29 @@ uchar TYPVAL<uchar>::GetTypedValue(PVAL valp)
/* TYPVAL SetValue: convert chars extracted from a line to TYPE value.*/
/***********************************************************************/
template
<
class
TYPE
>
void
TYPVAL
<
TYPE
>::
SetValue_char
(
char
*
p
,
int
n
)
{
char
*
p2
,
buf
[
32
];
bool
minus
=
false
;
for
(
p2
=
p
+
n
;
p
<
p2
&&
*
p
==
' '
;
p
++
)
;
for
(
Tval
=
0
,
minus
=
false
;
p
<
p2
;
p
++
)
switch
(
*
p
)
{
case
'-'
:
minus
=
true
;
case
'+'
:
break
;
case
'0'
:
Tval
=
Tval
*
10
;
break
;
case
'1'
:
Tval
=
Tval
*
10
+
1
;
break
;
case
'2'
:
Tval
=
Tval
*
10
+
2
;
break
;
case
'3'
:
Tval
=
Tval
*
10
+
3
;
break
;
case
'4'
:
Tval
=
Tval
*
10
+
4
;
break
;
case
'5'
:
Tval
=
Tval
*
10
+
5
;
break
;
case
'6'
:
Tval
=
Tval
*
10
+
6
;
break
;
case
'7'
:
Tval
=
Tval
*
10
+
7
;
break
;
case
'8'
:
Tval
=
Tval
*
10
+
8
;
break
;
case
'9'
:
Tval
=
Tval
*
10
+
9
;
break
;
default:
p
=
p2
;
}
// endswitch *p
if
(
minus
&&
Tval
)
Tval
=
(
-
(
signed
)
Tval
)
?
-
(
signed
)
Tval
:
Tval
;
bool
TYPVAL
<
TYPE
>::
SetValue_char
(
char
*
p
,
int
n
)
{
bool
rc
,
minus
;
ulonglong
maxval
=
MaxVal
();
ulonglong
val
=
CharToNumber
(
p
,
n
,
maxval
,
Unsigned
,
&
minus
,
&
rc
);
if
(
minus
&&
val
<
maxval
)
Tval
=
(
TYPE
)(
-
(
signed
)
val
);
else
Tval
=
(
TYPE
)
val
;
if
(
trace
>
1
)
if
(
trace
>
1
)
{
char
buf
[
64
];
htrc
(
strcat
(
strcat
(
strcpy
(
buf
,
" setting %s to: "
),
Fmt
),
"
\n
"
),
GetTypeName
(
Type
),
Tval
);
}
// endif trace
Null
=
false
;
return
rc
;
}
// end of SetValue
template
<
>
void
TYPVAL
<
double
>::
SetValue_char
(
char
*
p
,
int
n
)
bool
TYPVAL
<
double
>::
SetValue_char
(
char
*
p
,
int
n
)
{
if
(
p
)
{
char
buf
[
32
];
...
...
@@ -615,6 +679,7 @@ void TYPVAL<double>::SetValue_char(char *p, int n)
Null
=
Nullable
;
}
// endif p
return
false
;
}
// end of SetValue
/***********************************************************************/
...
...
@@ -624,7 +689,7 @@ template <class TYPE>
void
TYPVAL
<
TYPE
>::
SetValue_psz
(
PSZ
s
)
{
if
(
s
)
{
Tval
=
GetTypedValue
(
s
);
SetValue_char
(
s
,
(
int
)
strlen
(
s
)
);
Null
=
false
;
}
else
{
Reset
();
...
...
@@ -633,25 +698,6 @@ void TYPVAL<TYPE>::SetValue_psz(PSZ s)
}
// end of SetValue
template
<
>
int
TYPVAL
<
int
>::
GetTypedValue
(
PSZ
s
)
{
return
atol
(
s
);}
template
<
>
uint
TYPVAL
<
uint
>::
GetTypedValue
(
PSZ
s
)
{
return
(
unsigned
)
atol
(
s
);}
template
<
>
short
TYPVAL
<
short
>::
GetTypedValue
(
PSZ
s
)
{
return
(
short
)
atoi
(
s
);}
template
<
>
ushort
TYPVAL
<
ushort
>::
GetTypedValue
(
PSZ
s
)
{
return
(
ushort
)
atoi
(
s
);}
template
<
>
longlong
TYPVAL
<
longlong
>::
GetTypedValue
(
PSZ
s
)
{
return
atoll
(
s
);}
template
<
>
ulonglong
TYPVAL
<
ulonglong
>::
GetTypedValue
(
PSZ
s
)
{
return
(
unsigned
)
atoll
(
s
);}
template
<
>
double
TYPVAL
<
double
>::
GetTypedValue
(
PSZ
s
)
{
return
atof
(
s
);}
template
<
>
char
TYPVAL
<
char
>::
GetTypedValue
(
PSZ
s
)
{
return
(
char
)
atoi
(
s
);}
template
<
>
uchar
TYPVAL
<
uchar
>::
GetTypedValue
(
PSZ
s
)
{
return
(
uchar
)
atoi
(
s
);}
/***********************************************************************/
/* TYPVAL SetValue: set value with a TYPE extracted from a block. */
/***********************************************************************/
...
...
@@ -668,7 +714,7 @@ int TYPVAL<int>::GetTypedValue(PVBLK blk, int n)
template
<
>
uint
TYPVAL
<
uint
>::
GetTypedValue
(
PVBLK
blk
,
int
n
)
{
return
(
unsigned
)
blk
->
Get
IntValue
(
n
);}
{
return
blk
->
GetU
IntValue
(
n
);}
template
<
>
short
TYPVAL
<
short
>::
GetTypedValue
(
PVBLK
blk
,
int
n
)
...
...
@@ -676,7 +722,7 @@ short TYPVAL<short>::GetTypedValue(PVBLK blk, int n)
template
<
>
ushort
TYPVAL
<
ushort
>::
GetTypedValue
(
PVBLK
blk
,
int
n
)
{
return
(
unsigned
)
blk
->
Get
ShortValue
(
n
);}
{
return
blk
->
GetU
ShortValue
(
n
);}
template
<
>
longlong
TYPVAL
<
longlong
>::
GetTypedValue
(
PVBLK
blk
,
int
n
)
...
...
@@ -684,7 +730,7 @@ longlong TYPVAL<longlong>::GetTypedValue(PVBLK blk, int n)
template
<
>
ulonglong
TYPVAL
<
ulonglong
>::
GetTypedValue
(
PVBLK
blk
,
int
n
)
{
return
(
unsigned
)
blk
->
Get
BigintValue
(
n
);}
{
return
blk
->
GetU
BigintValue
(
n
);}
template
<
>
double
TYPVAL
<
double
>::
GetTypedValue
(
PVBLK
blk
,
int
n
)
...
...
@@ -696,7 +742,7 @@ char TYPVAL<char>::GetTypedValue(PVBLK blk, int n)
template
<
>
uchar
TYPVAL
<
uchar
>::
GetTypedValue
(
PVBLK
blk
,
int
n
)
{
return
(
unsigned
)
blk
->
Get
TinyValue
(
n
);}
{
return
blk
->
GetU
TinyValue
(
n
);}
/***********************************************************************/
/* TYPVAL SetBinValue: with bytes extracted from a line. */
...
...
@@ -830,6 +876,8 @@ bool TYPVAL<TYPE>::IsEqual(PVAL vp, bool chktype)
return
true
;
else
if
(
chktype
&&
Type
!=
vp
->
GetType
())
return
false
;
else
if
(
chktype
&&
Unsigned
!=
vp
->
IsUnsigned
())
return
false
;
else
if
(
Null
||
vp
->
IsNull
())
return
false
;
else
...
...
@@ -931,6 +979,82 @@ TYPVAL<PSZ>::TYPVAL(PGLOBAL g, PSZ s, int n, int c)
Ci
=
(
c
!=
0
);
}
// end of STRING constructor
/***********************************************************************/
/* Get the tiny value represented by the Strp string. */
/***********************************************************************/
char
TYPVAL
<
PSZ
>::
GetTinyValue
(
void
)
{
bool
m
;
ulonglong
val
=
CharToNumber
(
Strp
,
strlen
(
Strp
),
INT_MAX8
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX8
)
?
(
char
)(
-
(
signed
)
val
)
:
(
char
)
val
;
}
// end of GetTinyValue
/***********************************************************************/
/* Get the unsigned tiny value represented by the Strp string. */
/***********************************************************************/
uchar
TYPVAL
<
PSZ
>::
GetUTinyValue
(
void
)
{
return
(
uchar
)
CharToNumber
(
Strp
,
strlen
(
Strp
),
UINT_MAX8
,
true
);
}
// end of GetUTinyValue
/***********************************************************************/
/* Get the short value represented by the Strp string. */
/***********************************************************************/
short
TYPVAL
<
PSZ
>::
GetShortValue
(
void
)
{
bool
m
;
ulonglong
val
=
CharToNumber
(
Strp
,
strlen
(
Strp
),
INT_MAX16
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX16
)
?
(
short
)(
-
(
signed
)
val
)
:
(
short
)
val
;
}
// end of GetShortValue
/***********************************************************************/
/* Get the unsigned short value represented by the Strp string. */
/***********************************************************************/
ushort
TYPVAL
<
PSZ
>::
GetUShortValue
(
void
)
{
return
(
ushort
)
CharToNumber
(
Strp
,
strlen
(
Strp
),
UINT_MAX16
,
true
);
}
// end of GetUshortValue
/***********************************************************************/
/* Get the integer value represented by the Strp string. */
/***********************************************************************/
int
TYPVAL
<
PSZ
>::
GetIntValue
(
void
)
{
bool
m
;
ulonglong
val
=
CharToNumber
(
Strp
,
strlen
(
Strp
),
INT_MAX32
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX32
)
?
(
int
)(
-
(
signed
)
val
)
:
(
int
)
val
;
}
// end of GetIntValue
/***********************************************************************/
/* Get the unsigned integer value represented by the Strp string. */
/***********************************************************************/
uint
TYPVAL
<
PSZ
>::
GetUIntValue
(
void
)
{
return
(
uint
)
CharToNumber
(
Strp
,
strlen
(
Strp
),
UINT_MAX32
,
true
);
}
// end of GetUintValue
/***********************************************************************/
/* Get the big integer value represented by the Strp string. */
/***********************************************************************/
longlong
TYPVAL
<
PSZ
>::
GetBigintValue
(
void
)
{
bool
m
;
ulonglong
val
=
CharToNumber
(
Strp
,
strlen
(
Strp
),
INT_MAX64
,
false
,
&
m
);
return
(
m
&&
val
<
INT_MAX64
)
?
(
-
(
signed
)
val
)
:
(
longlong
)
val
;
}
// end of GetBigintValue
/***********************************************************************/
/* Get the unsigned big integer value represented by the Strp string. */
/***********************************************************************/
ulonglong
TYPVAL
<
PSZ
>::
GetUBigintValue
(
void
)
{
return
CharToNumber
(
Strp
,
strlen
(
Strp
),
ULONGLONG_MAX
,
true
);
}
// end of GetUBigintValue
/***********************************************************************/
/* STRING SetValue: copy the value of another Value object. */
/***********************************************************************/
...
...
@@ -952,9 +1076,13 @@ bool TYPVAL<PSZ>::SetValue_pval(PVAL valp, bool chktype)
/***********************************************************************/
/* STRING SetValue: fill string with chars extracted from a line. */
/***********************************************************************/
void
TYPVAL
<
PSZ
>::
SetValue_char
(
char
*
p
,
int
n
)
bool
TYPVAL
<
PSZ
>::
SetValue_char
(
char
*
p
,
int
n
)
{
bool
rc
;
if
(
p
)
{
rc
=
n
>
Len
;
if
((
n
=
min
(
n
,
Len
)))
{
strncpy
(
Strp
,
p
,
n
);
...
...
@@ -973,10 +1101,12 @@ void TYPVAL<PSZ>::SetValue_char(char *p, int n)
Null
=
false
;
}
else
{
rc
=
false
;
Reset
();
Null
=
Nullable
;
}
// endif p
return
rc
;
}
// end of SetValue_char
/***********************************************************************/
...
...
@@ -1179,53 +1309,6 @@ char *TYPVAL<PSZ>::GetCharString(char *p)
return
Strp
;
}
// end of GetCharString
#if 0
/***********************************************************************/
/* STRING GetShortString: get short representation of a char value. */
/***********************************************************************/
char *TYPVAL<PSZ>::GetShortString(char *p, int n)
{
sprintf(p, "%*hd", n, (short)(Null ? 0 : atoi(Strp)));
return p;
} // end of GetShortString
/***********************************************************************/
/* STRING GetIntString: get int representation of a char value. */
/***********************************************************************/
char *TYPVAL<PSZ>::GetIntString(char *p, int n)
{
sprintf(p, "%*ld", n, (Null) ? 0 : atol(Strp));
return p;
} // end of GetIntString
/***********************************************************************/
/* STRING GetBigintString: get big int representation of a char value.*/
/***********************************************************************/
char *TYPVAL<PSZ>::GetBigintString(char *p, int n)
{
sprintf(p, "%*lld", n, (Null) ? 0 : atoll(Strp));
return p;
} // end of GetBigintString
/***********************************************************************/
/* STRING GetFloatString: get double representation of a char value. */
/***********************************************************************/
char *TYPVAL<PSZ>::GetFloatString(char *p, int n, int prec)
{
sprintf(p, "%*.*lf", n, (prec < 0) ? 2 : prec, Null ? 0 : atof(Strp));
return p;
} // end of GetFloatString
/***********************************************************************/
/* STRING GetTinyString: get tiny int representation of a char value. */
/***********************************************************************/
char *TYPVAL<PSZ>::GetTinyString(char *p, int n)
{
sprintf(p, "%*d", n, (Null) ? 0 : (char)atoi(Strp));
return p;
} // end of GetIntString
#endif // 0
/***********************************************************************/
/* STRING compare value with another Value. */
/***********************************************************************/
...
...
@@ -1353,11 +1436,7 @@ void DTVAL::SetTimeShift(void)
}
// end of SetTimeShift
/***********************************************************************/
/* GetGmTime: returns a pointer to a static tm structure obtained */
/* though the gmtime C function. The purpose of this function is to */
/* extend the range of valid dates by accepting negative time values. */
/***********************************************************************/
// Added by Alexander Barkov
static
void
TIME_to_localtime
(
struct
tm
*
tm
,
const
MYSQL_TIME
*
ltime
)
{
bzero
(
tm
,
sizeof
(
*
tm
));
...
...
@@ -1369,7 +1448,7 @@ static void TIME_to_localtime(struct tm *tm, const MYSQL_TIME *ltime)
tm
->
tm_sec
=
ltime
->
second
;
}
// Added by Alexander Barkov
static
struct
tm
*
gmtime_mysql
(
const
time_t
*
timep
,
struct
tm
*
tm
)
{
MYSQL_TIME
ltime
;
...
...
@@ -1378,7 +1457,11 @@ static struct tm *gmtime_mysql(const time_t *timep, struct tm *tm)
return
tm
;
}
/***********************************************************************/
/* GetGmTime: returns a pointer to a static tm structure obtained */
/* though the gmtime C function. The purpose of this function is to */
/* extend the range of valid dates by accepting negative time values. */
/***********************************************************************/
struct
tm
*
DTVAL
::
GetGmTime
(
struct
tm
*
tm_buffer
)
{
struct
tm
*
datm
;
...
...
@@ -1401,12 +1484,7 @@ struct tm *DTVAL::GetGmTime(struct tm *tm_buffer)
return
datm
;
}
// end of GetGmTime
/***********************************************************************/
/* MakeTime: calculates a date value from a tm structures using the */
/* mktime C function. The purpose of this function is to extend the */
/* range of valid dates by accepting to set negative time values. */
/***********************************************************************/
// Added by Alexander Barkov
static
time_t
mktime_mysql
(
struct
tm
*
ptm
)
{
MYSQL_TIME
ltime
;
...
...
@@ -1417,6 +1495,11 @@ static time_t mktime_mysql(struct tm *ptm)
return
error_code
?
(
time_t
)
-
1
:
t
;
}
/***********************************************************************/
/* MakeTime: calculates a date value from a tm structures using the */
/* mktime C function. The purpose of this function is to extend the */
/* range of valid dates by accepting to set negative time values. */
/***********************************************************************/
bool
DTVAL
::
MakeTime
(
struct
tm
*
ptm
)
{
int
n
,
y
=
ptm
->
tm_year
;
...
...
@@ -1573,8 +1656,10 @@ bool DTVAL::SetValue_pval(PVAL valp, bool chktype)
/***********************************************************************/
/* SetValue: convert chars extracted from a line to date value. */
/***********************************************************************/
void
DTVAL
::
SetValue_char
(
char
*
p
,
int
n
)
bool
DTVAL
::
SetValue_char
(
char
*
p
,
int
n
)
{
bool
rc
;
if
(
Pdtp
)
{
char
*
p2
;
int
ndv
;
...
...
@@ -1583,7 +1668,9 @@ void DTVAL::SetValue_char(char *p, int n)
// Trim trailing blanks
for
(
p2
=
p
+
n
-
1
;
p
<
p2
&&
*
p2
==
' '
;
p2
--
)
;
n
=
min
(
p2
-
p
+
1
,
Len
);
if
((
rc
=
(
n
=
p2
-
p
+
1
)
>
Len
))
n
=
Len
;
memcpy
(
Sdate
,
p
,
n
);
Sdate
[
n
]
=
'\0'
;
...
...
@@ -1595,8 +1682,9 @@ void DTVAL::SetValue_char(char *p, int n)
Null
=
false
;
}
else
TYPVAL
<
int
>::
SetValue_char
(
p
,
n
);
rc
=
TYPVAL
<
int
>::
SetValue_char
(
p
,
n
);
return
rc
;
}
// end of SetValue
/***********************************************************************/
...
...
@@ -1696,6 +1784,7 @@ char *DTVAL::ShowValue(char *buf, int len)
}
// end of ShowValue
#if 0 // Not used by CONNECT
/***********************************************************************/
/* Returns a member of the struct tm representation of the date. */
/***********************************************************************/
...
...
@@ -1745,6 +1834,7 @@ bool DTVAL::WeekNum(PGLOBAL g, int& nval)
// Everything should be Ok
return false;
} // end of WeekNum
#endif // 0
/***********************************************************************/
/* FormatValue: This function set vp (a STRING value) to the string */
...
...
storage/connect/value.h
View file @
4dafdf16
...
...
@@ -16,11 +16,6 @@
#include "assert.h"
#include "block.h"
#if defined(WIN32)
#define strtoll _strtoi64
#define atoll(S) strtoll(S, NULL, 10)
#endif // WIN32
/***********************************************************************/
/* Types used in some class definitions. */
/***********************************************************************/
...
...
@@ -55,6 +50,8 @@ DllExport bool IsTypeNum(int type);
DllExport
PVAL
AllocateValue
(
PGLOBAL
,
PVAL
,
int
=
TYPE_VOID
,
int
=
0
);
DllExport
PVAL
AllocateValue
(
PGLOBAL
,
int
,
int
len
=
0
,
int
prec
=
0
,
PSZ
fmt
=
NULL
);
DllExport
ulonglong
CharToNumber
(
char
*
,
int
,
ulonglong
,
bool
,
bool
*
minus
=
NULL
,
bool
*
rc
=
NULL
);
/***********************************************************************/
/* Class VALUE represents a constant or variable of any valid type. */
...
...
@@ -96,7 +93,7 @@ class DllExport VALUE : public BLOCK {
// Methods
virtual
bool
SetValue_pval
(
PVAL
valp
,
bool
chktype
=
false
)
=
0
;
virtual
void
SetValue_char
(
char
*
p
,
int
n
)
=
0
;
virtual
bool
SetValue_char
(
char
*
p
,
int
n
)
=
0
;
virtual
void
SetValue_psz
(
PSZ
s
)
=
0
;
virtual
void
SetValue
(
char
c
)
{
assert
(
false
);}
virtual
void
SetValue
(
uchar
c
)
{
assert
(
false
);}
...
...
@@ -112,11 +109,6 @@ class DllExport VALUE : public BLOCK {
virtual
bool
GetBinValue
(
void
*
buf
,
int
buflen
,
bool
go
)
=
0
;
virtual
char
*
ShowValue
(
char
*
buf
,
int
len
=
0
)
=
0
;
virtual
char
*
GetCharString
(
char
*
p
)
=
0
;
//virtual char *GetShortString(char *p, int n) {return "#####";}
//virtual char *GetIntString(char *p, int n) = 0;
//virtual char *GetBigintString(char *p, int n) = 0;
//virtual char *GetFloatString(char *p, int n, int prec) = 0;
//virtual char *GetTinyString(char *p, int n) {return "?";}
virtual
bool
IsEqual
(
PVAL
vp
,
bool
chktype
)
=
0
;
virtual
bool
FormatValue
(
PVAL
vp
,
char
*
fmt
)
=
0
;
...
...
@@ -169,7 +161,7 @@ class DllExport TYPVAL : public VALUE {
// Methods
virtual
bool
SetValue_pval
(
PVAL
valp
,
bool
chktype
);
virtual
void
SetValue_char
(
char
*
p
,
int
n
);
virtual
bool
SetValue_char
(
char
*
p
,
int
n
);
virtual
void
SetValue_psz
(
PSZ
s
);
virtual
void
SetValue
(
char
c
)
{
Tval
=
(
TYPE
)
c
;
Null
=
false
;}
virtual
void
SetValue
(
uchar
c
)
{
Tval
=
(
TYPE
)
c
;
Null
=
false
;}
...
...
@@ -185,11 +177,6 @@ class DllExport TYPVAL : public VALUE {
virtual
bool
GetBinValue
(
void
*
buf
,
int
buflen
,
bool
go
);
virtual
char
*
ShowValue
(
char
*
buf
,
int
);
virtual
char
*
GetCharString
(
char
*
p
);
//virtual char *GetShortString(char *p, int n);
//virtual char *GetIntString(char *p, int n);
//virtual char *GetBigintString(char *p, int n);
//virtual char *GetFloatString(char *p, int n, int prec = -1);
//virtual char *GetTinyString(char *p, int n);
virtual
bool
IsEqual
(
PVAL
vp
,
bool
chktype
);
virtual
bool
SetConstFormat
(
PGLOBAL
,
FORMAT
&
);
virtual
bool
FormatValue
(
PVAL
vp
,
char
*
fmt
);
...
...
@@ -201,9 +188,10 @@ class DllExport TYPVAL : public VALUE {
TYPVAL
(
void
)
:
VALUE
(
TYPE_ERROR
)
{}
// Specialized functions
TYPE
GetTypedValue
(
PVAL
vp
);
TYPE
GetTypedValue
(
PVBLK
blk
,
int
n
);
TYPE
GetTypedValue
(
PSZ
s
);
static
ulonglong
MaxVal
(
void
);
TYPE
GetTypedValue
(
PVAL
vp
);
TYPE
GetTypedValue
(
PVBLK
blk
,
int
n
);
// TYPE GetTypedValue(PSZ s);
// Members
TYPE
Tval
;
...
...
@@ -227,21 +215,21 @@ class DllExport TYPVAL<PSZ>: public VALUE {
virtual
int
GetValPrec
()
{
return
(
Ci
)
?
1
:
0
;}
virtual
int
GetSize
(
void
)
{
return
(
Strp
)
?
strlen
(
Strp
)
:
0
;}
virtual
PSZ
GetCharValue
(
void
)
{
return
Strp
;}
virtual
char
GetTinyValue
(
void
)
{
return
(
char
)
atoi
(
Strp
);}
virtual
uchar
GetUTinyValue
(
void
)
{
return
(
uchar
)
atoi
(
Strp
);}
virtual
short
GetShortValue
(
void
)
{
return
(
short
)
atoi
(
Strp
);}
virtual
ushort
GetUShortValue
(
void
)
{
return
(
ushort
)
atoi
(
Strp
);}
virtual
int
GetIntValue
(
void
)
{
return
atol
(
Strp
);}
virtual
uint
GetUIntValue
(
void
)
{
return
(
uint
)
atol
(
Strp
);}
virtual
longlong
GetBigintValue
(
void
)
{
return
atoll
(
Strp
);}
virtual
ulonglong
GetUBigintValue
(
void
)
{
return
(
ulonglong
)
atoll
(
Strp
);}
virtual
char
GetTinyValue
(
void
)
;
virtual
uchar
GetUTinyValue
(
void
)
;
virtual
short
GetShortValue
(
void
)
;
virtual
ushort
GetUShortValue
(
void
)
;
virtual
int
GetIntValue
(
void
)
;
virtual
uint
GetUIntValue
(
void
)
;
virtual
longlong
GetBigintValue
(
void
)
;
virtual
ulonglong
GetUBigintValue
(
void
)
;
virtual
double
GetFloatValue
(
void
)
{
return
atof
(
Strp
);}
virtual
void
*
GetTo_Val
(
void
)
{
return
Strp
;}
virtual
void
SetPrec
(
int
prec
)
{
Ci
=
prec
!=
0
;}
// Methods
virtual
bool
SetValue_pval
(
PVAL
valp
,
bool
chktype
);
virtual
void
SetValue_char
(
char
*
p
,
int
n
);
virtual
bool
SetValue_char
(
char
*
p
,
int
n
);
virtual
void
SetValue_psz
(
PSZ
s
);
virtual
void
SetValue_pvblk
(
PVBLK
blk
,
int
n
);
virtual
void
SetValue
(
char
c
);
...
...
@@ -257,23 +245,10 @@ class DllExport TYPVAL<PSZ>: public VALUE {
virtual
bool
GetBinValue
(
void
*
buf
,
int
buflen
,
bool
go
);
virtual
char
*
ShowValue
(
char
*
buf
,
int
);
virtual
char
*
GetCharString
(
char
*
p
);
//virtual char *GetShortString(char *p, int n);
//virtual char *GetIntString(char *p, int n);
//virtual char *GetBigintString(char *p, int n);
//virtual char *GetFloatString(char *p, int n, int prec = -1);
//virtual char *GetTinyString(char *p, int n);
virtual
bool
IsEqual
(
PVAL
vp
,
bool
chktype
);
virtual
bool
FormatValue
(
PVAL
vp
,
char
*
fmt
);
virtual
bool
SetConstFormat
(
PGLOBAL
,
FORMAT
&
);
// Specialized functions
//template <class T>
//T GetValue_as(T type) {return Strp;}
//int GetValue_as(int type) {return atol(Strp);}
//short GetValue_as(short type) {return (short)atoi(Strp);}
//longlong GetValue_as(longlong type) {return atoll(Strp);}
//double GetValue_as(double type) {return atof(Strp);}
// Members
PSZ
Strp
;
bool
Ci
;
// true if case insensitive
...
...
@@ -295,7 +270,7 @@ class DllExport DTVAL : public TYPVAL<int> {
// Implementation
virtual
bool
SetValue_pval
(
PVAL
valp
,
bool
chktype
);
virtual
void
SetValue_char
(
char
*
p
,
int
n
);
virtual
bool
SetValue_char
(
char
*
p
,
int
n
);
virtual
void
SetValue_psz
(
PSZ
s
);
virtual
void
SetValue_pvblk
(
PVBLK
blk
,
int
n
);
virtual
char
*
GetCharString
(
char
*
p
);
...
...
@@ -304,15 +279,15 @@ class DllExport DTVAL : public TYPVAL<int> {
bool
SetFormat
(
PGLOBAL
g
,
PSZ
fmt
,
int
len
,
int
year
=
0
);
bool
SetFormat
(
PGLOBAL
g
,
PVAL
valp
);
bool
IsFormatted
(
void
)
{
return
Pdtp
!=
NULL
;}
bool
GetTmMember
(
OPVAL
op
,
int
&
mval
);
bool
DateDiff
(
DTVAL
*
dtp
,
OPVAL
op
,
int
&
tdif
);
//
bool GetTmMember(OPVAL op, int& mval);
//
bool DateDiff(DTVAL *dtp, OPVAL op, int& tdif);
bool
MakeTime
(
struct
tm
*
ptm
);
static
void
SetTimeShift
(
void
);
static
int
GetShift
(
void
)
{
return
Shift
;}
// Methods
bool
MakeDate
(
PGLOBAL
g
,
int
*
val
,
int
nval
);
bool
WeekNum
(
PGLOBAL
g
,
int
&
nval
);
//
bool WeekNum(PGLOBAL g, int& nval);
struct
tm
*
GetGmTime
(
struct
tm
*
);
...
...
storage/connect/xobject.cpp
View file @
4dafdf16
...
...
@@ -134,6 +134,7 @@ bool CONSTANT::Compare(PXOB xp)
}
// end of Compare
#if 0
/***********************************************************************/
/* Rephrase: temporary implementation used by PlugRephraseSQL. */
/***********************************************************************/
...
...
@@ -166,6 +167,7 @@ bool CONSTANT::Rephrase(PGLOBAL g, PSZ work)
return false;
} // end of Rephrase
#endif // 0
/***********************************************************************/
/* Make file output of a constant object. */
...
...
storage/connect/xobject.h
View file @
4dafdf16
...
...
@@ -124,7 +124,7 @@ class DllExport CONSTANT : public XOBJECT {
{
return
Value
->
SetConstFormat
(
g
,
fmt
);}
virtual
int
CheckSpcCol
(
PTDB
,
int
)
{
return
1
;}
void
Convert
(
PGLOBAL
g
,
int
newtype
);
bool
Rephrase
(
PGLOBAL
g
,
PSZ
work
);
//
bool Rephrase(PGLOBAL g, PSZ work);
void
SetValue
(
PVAL
vp
)
{
Value
=
vp
;}
virtual
bool
VerifyColumn
(
PTBX
txp
)
{
return
true
;}
virtual
bool
VerifyTdb
(
PTDB
&
tdbp
)
{
return
true
;}
...
...
storage/connect/xtable.h
View file @
4dafdf16
...
...
@@ -242,6 +242,7 @@ class TDBCAT : public TDBASE {
virtual
int
GetRecpos
(
void
)
{
return
N
;}
virtual
int
GetProgCur
(
void
)
{
return
N
;}
virtual
int
RowNumber
(
PGLOBAL
g
,
bool
b
=
false
)
{
return
N
+
1
;}
virtual
bool
SetRecpos
(
PGLOBAL
g
,
int
recpos
);
// Database routines
virtual
PCOL
MakeCol
(
PGLOBAL
g
,
PCOLDEF
cdp
,
PCOL
cprec
,
int
n
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment